Overview
Connecting Reddit Ads lets the dashboard:- Create, update, pause, resume, and delete campaigns and ad groups.
- Upload image and video media into the connected ad account.
- Create ads (including promoted-post format) that reference an uploaded post and media.
- Pull spend, impressions, clicks, conversions, and conversion value from Reddit’s reporting endpoint.
- Run creative experiments by rotating multiple ad groups under one campaign with shared targeting.
Prerequisites
Before connecting, make sure you have:- An active Reddit Ads account in good standing.
- An OAuth-enabled Reddit application configured for the dashboard’s redirect URI. The
client_idandclient_secretare set on the platform side asREDDIT_ADS_CLIENT_IDandREDDIT_ADS_CLIENT_SECRET.
OAuth scopes
The connection requests the following scopes:adsread covers list and report operations; adsedit covers all create / update / delete writes.
Connect
- Open the Paid UA → Integrations page in the dashboard.
- Click Connect on the Reddit Ads tile.
- Sign in with the Reddit account that has access to your ads accounts.
- Approve the requested scopes.
- After redirect, the dashboard probes
/me/accountsto confirm access and stores the connected account id.
https://www.reddit.com/api/v1/access_token.
What happens behind the scenes
| Operation | API endpoint |
|---|---|
| List ad accounts the user can access | GET /me/accounts |
| Create / list campaigns | POST / GET /accounts/{id}/campaigns |
| Update / pause / resume / delete campaign | PUT / DELETE /campaigns/{id} |
| Create / update ad groups | POST /accounts/{id}/ad_groups, PUT /ad_groups/{id} |
| Create / update ads | POST /accounts/{id}/ads, PUT /ads/{id} |
| Upload media (image / video) | POST /accounts/{id}/media |
| Create a post (for promoted-post ads) | POST /accounts/{id}/posts |
| Pull insights | GET /accounts/{id}/reports?breakdowns=...&metrics=... |
Idempotency-Key HTTP header so retries do not produce duplicate resources, even if the platform connection drops mid-request.
Rate limiting
Requests are throttled per(client_id, ad_account_id) using a sliding window built on Redis. The default budget is 60 requests per minute per ad account. If the platform reports HTTP 429, the request is automatically retried with exponential backoff.
Reporting
Metrics are pulled hourly (or on demand) from Reddit’s reports endpoint. Default breakdown isdate,campaign_id; default metrics are spend,impressions,clicks,conversions,conversion_value.
Spend is converted from native currency to USD on ingestion. The native currency, the FX rate used, and the local-currency spend are kept alongside the USD value for downstream analytics.
Experiments (multi-ad-group rotation)
Reddit does not expose a native experiment primitive. The dashboard maps experiment variants onto multiple ad groups under a single campaign that share targeting, with each variant carrying its own creative. The control variant ships active; treatments ship paused until the experiment runner toggles them. Per-variant performance is read back from the reports endpoint withbreakdowns=ad_group_id.
Dry-run mode
The Reddit Ads API has historically introduced backwards-incompatible changes in minor revisions. To insulate production tenants from upstream churn, the integration ships in dry-run mode by default — write operations return synthetic mock ids and do not call Reddit. Set the platform-side environment flagREDDIT_ADS_LIVE_MODE=true (and re-verify the v3 surface against current docs) before flipping production tenants to live calls.
Disconnect
Click Disconnect on the integration tile. The OAuth refresh token is removed from the dashboard. To fully revoke access, also remove the third-party app authorisation from your Reddit account preferences.Troubleshooting
- “Reddit Ads /me/accounts returned 401” — the OAuth token has been revoked or has expired without a valid refresh token. Re-connect the integration.
- “Reddit Ads create_campaign: 429 — …” — your account’s per-minute API quota was breached. The dashboard backs off automatically; if the error persists, lower campaign-mutation frequency.
- “webhooks not supported on reddit_ads” — Reddit Ads has no webhook surface. State changes are detected via the hourly metrics-sync job instead.
- Synthetic / mock ids returned in production — the platform is running in dry-run mode. Ask your administrator to set
REDDIT_ADS_LIVE_MODE=trueonce the v3 API surface is verified.

