Connect Reddit Ads
Tasks call the Reddit Ads API through qbash.integrations.reddit_ads. The connector reads and changes ad accounts, audiences, creatives, campaigns, ad groups and ads, pulls performance reports, sends conversion events and manages product catalogs.
qbash signs in through a developer app that your business creates in Reddit Ads Manager. Reddit applies its rate limits to that app.
What you need
- A Reddit Ads account with at least one ad account.
- A business admin on that account whose Reddit account is verified. Only a business admin can create the developer app and approve access for it.
Create the developer app
- Sign in to Reddit Ads Manager as a business admin.
- Open Business, then Developer Portal, and select Add Apps, then Create an app.
- Fill in the app:
- App name: a name that says what the app is for, such as "Acme qbash reporting". Reddit asks you to avoid generic names like "Test".
- About URL: a page about your business.
- Redirect URL: copy it from the qbash credential form, which shows it under the instructions. For qbash cloud it is
https://app.qbash.com/oauth/reddit-ads/callback. Paste it exactly, with no trailing slash. - Primary contact: a business admin. Reddit may contact this person about the app, and a member cannot be removed from the business while they are an app's primary contact.
- Select Create App. Reddit shows the app ID under the app name and generates its secret.
A business can have up to 10 developer apps. You can change an app's settings later from the Developer Portal, except its app ID and secret.
Reddit documents these steps in Create a Developer Application.
Add the credential in qbash
- Open Connectors, then Reddit Ads, and click Connect.
- Enter a credential name, then paste the App ID and App Secret from the Developer Portal.
- Click Connect with Reddit. Reddit opens in a popup.
- Choose who approves access:
- Yourself: the connection acts as your Reddit account and stops working if you lose access to the business or your account is deactivated.
- A System User: a non-human identity owned by the business. The connection keeps working when people change roles or leave, and SSO or MFA prompts on a person's account do not interrupt it. Pick this for scheduled tasks a team depends on. Reddit asks you to create a System User or pick an existing one, then set its business role and ad account permissions.
- Approve the request. qbash asks for all four Reddit Ads scopes:
adsread,adsedit,adsconversionsandadsdatadeletion. - In the task editor, open Resources, then Integrations, and select this credential. See Resources.
When you edit the credential, the form shows who it is connected as, a Reddit username or a System User. Editing only renames it. To connect a different app or identity, add a new credential.
A System User belongs to one business and one developer app, and a business can have up to 10. A business admin manages them in Business Manager → Users → System Users. Revoking one ends the connection until a business admin approves it again. Reddit's System Users guide covers the setup screens. Changes made through a System User can show as made by "Reddit" in the ad account history.
Pull a report from a task
businesses = qbash.integrations.reddit_ads.list_my_businesses()["businesses"]
accounts = qbash.integrations.reddit_ads.list_ad_accounts(business_id=businesses[0]["id"])["ad_accounts"]
report = qbash.integrations.reddit_ads.get_report(
ad_account_id=accounts[0]["id"],
starts_at="2026-10-13",
ends_at="2026-10-20",
fields=["IMPRESSIONS", "CLICKS", "SPEND", "CONVERSION_PURCHASE_CLICKS"],
breakdowns=["CAMPAIGN_ID", "DATE"],
fetch_all=True,
)
for row in report["metrics"]:
print(row["date"], row["campaign_id"], row["clicks"], (row["spend"] or 0) / 1_000_000)
Rows come back with the requested fields in lowercase, one key per breakdown. Reddit returns rows only, so add totals up yourself.
Build a paused campaign
ad_account_id = "your-ad-account-id"
funding = qbash.integrations.reddit_ads.list_funding_instruments(ad_account_id=ad_account_id)["funding_instruments"]
campaign = qbash.integrations.reddit_ads.create_campaign(
ad_account_id=ad_account_id,
name="Spring launch",
objective="CLICKS",
funding_instrument_id=funding[0]["id"],
)["campaign"]
print(campaign["id"], campaign["configured_status"])
A launch runs in three steps: create_campaign, then create_ad_group with targeting, bid, budget and a conversion_pixel_id, then create_ad with a post made by create_structured_post. list_pixels_by_ad_account and list_profiles_by_ad_account return the pixel and profile IDs these calls need. The SDK reference lists every method and parameter.
Details that change results
- New campaigns, ad groups and ads start with
configured_statusset toPAUSED. Nothing spends until a task passesconfigured_status="ACTIVE"on create or update. - Budgets, bids, spend caps and report fields such as
SPEND,CPC,ECPMand every*_ECPAare micro-currency: 1,000,000 is 1.00 in the account currency. Catalog prices are plain amounts with a currency code, such as"19.99 USD". Conversion events sent withpost_conversion_eventstakevalueanditem_priceas plain amounts too, such as10.99. Report fields namedCONVERSION_*_TOTAL_VALUEcome back in cents. - Reddit locks a post's copy, media and link once the post is created.
update_structured_postonly changesallow_comments, so new copy needs a new post and a new ad. - Reddit recalculates
effective_statussome time afterconfigured_statuschanges, and a new ad readsPENDING_APPROVALuntil review finishes. Read the object again before acting on its status. - A report takes up to 3 breakdowns, or 4 when both
COUNTRYandREGIONare included. From December 8, 2026, anHOURbreakdown covers at most 7 days, and a report can use only one ofKEYWORD,COMMUNITY,INTERESTorLANGUAGE, with none ofDMA,REGION,GALLERY_ITEM_ID,OS_TYPEorCOUNTRYbeside it. qbash checks these rules before calling Reddit and returns an error that names the broken rule. - Report figures can change for up to 6 hours, and Reddit corrects late conversions in a daily refresh.
metrics_updated_atsays when Reddit last refreshed the numbers. - Reports allow 60 requests a minute and
estimate_audience_and_deliveryallows 10. Bid and reach suggestions allow 30, and targeting lookups 100. qbash waits and retries a rate-limited call up to three times, using the wait Reddit returns. update_custom_audience_userstakes plain emails and mobile advertising IDs, normalizes them and hashes them with SHA-256 before upload. Passalready_hashed=Trueif your values are hashed already. qbash keeps the identifiers in these calls out of the task's step log.
Seed a test account
Use an ad account with a funding instrument, a profile and a Reddit Pixel created in Events Manager. Ad groups need a pixel. Build a campaign, ad group and ad with the defaults so everything stays paused, and run reports against an account that has spent in the last week.