You want to manage Reddit ad campaigns programmatically. Maybe you need to pull performance data into your own dashboard. Maybe you want to automate bid adjustments or pause underperforming ads without logging into the Ads console every day.
The Reddit Marketing API is how you do that. It’s a REST API that lets you read and write advertising data directly.
But most guides skip the real setup friction. Here is the step-by-step workflow I actually use.
What the Reddit Marketing API Actually Lets You Do
The API covers four main areas:
- Campaign management – create, update, pause, or delete campaigns.
- Reporting – pull impressions, clicks, spend, CTR, and conversion data.
- Audience management – upload and manage custom audiences.
- Account management – view account settings and billing info.
You cannot use it to post organic content or manage subreddit subscriptions. That is the Reddit Data API, which is a different thing entirely.
Requirements Before You Start
Before you write a single line of code, check these:
- A Reddit Ads account – The Marketing API requires an active advertising account. No organic account access.
- App registration – You need to register an application on Reddit to get a client ID and secret.
- OAuth2 credentials – The API uses OAuth2 for authentication. You will need to generate a refresh token.
- Basic HTTP knowledge – You should understand how to make GET and POST requests, and how to handle JSON responses.
- A tool to test calls – Postman, Insomnia, or a simple Python/Node.js script. I use Python with the
requestslibrary.
If you plan to manage multiple accounts or campaigns from a single machine, consider using a privacy browser for each advertising account to keep sessions separated. This is not about evasion; it is about clean workflow separation and preventing accidental cross-account data leaks.
Step 1: Create a Reddit App and Get Your API Credentials
Go to https://www.reddit.com/prefs/apps.
Click Create App or Create Another App.
Fill in:
- Name: Something descriptive like
my-ad-reporting-tool - App type: Select Web App (even if you are building a script)
- Description: Optional
- About URL: You can use a placeholder like
http://localhost - Redirect URI: Use
http://localhost:8080for local development
After you create the app, you will see two values:
- Client ID – The string under the app name
- Client Secret – Listed as “secret”
Copy both. You will need them in the next step.
Step 2: Authenticate and Generate an Access Token
The Reddit Marketing API uses OAuth2 with the client_credentials grant type for most automation workflows.
Open your terminal or API client and send a POST request to:
https://www.reddit.com/api/v1/access_token
With the following headers:
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded
And the body:
grant_type=client_credentials
If your credentials are correct, Reddit returns a JSON object with an access_token field. That token is valid for one hour.
Important: Store this token securely. Do not hardcode it in client-side code or commit it to public repositories.
Step 3: Make Your First API Call (Fetch Campaign Data)
Now you can call the API. The base URL is:
https://ads-api.reddit.com/api/v2
To list campaigns in your account, send a GET request to:
https://ads-api.reddit.com/api/v2/me/campaigns
With this header:
Authorization: Bearer YOUR_ACCESS_TOKEN
If everything works, you get back a JSON array of your campaigns with fields like id, name, status, budget, and impressions.
If you get a 401 or 403 error, your token is expired or your app does not have the correct scopes. Re-authenticate and check that your app was registered as a Web App.
Step 4: Build a Simple Reporting Loop
Once you can fetch campaigns, you can pull performance data.
Use the /reports endpoint. For example:
GET https://ads-api.reddit.com/api/v2/me/reports
?start_date=2025-01-01
&end_date=2025-01-31
&group_by=campaign
The response includes metrics like spend, impressions, clicks, and conversions.
I run this as a weekly cron job. Here is the checklist I follow:
- [ ] Generate a fresh access token
- [ ] Pull campaign list
- [ ] Pull report data for the last 7 days
- [ ] Write results to a CSV or Google Sheet
- [ ] Alert me if any campaign CTR drops below 0.5%
Pro tip: The token expires every hour. For long-running scripts, implement automatic token refresh. Store the refresh token in a secure environment variable.
Common Blockers and How to Fix Them
| Blocker | Likely Cause | Fix |
|---|---|---|
| 401 Unauthorized | Expired or invalid token | Re-authenticate and check token scopes |
| 403 Forbidden | App not authorized for Marketing API | Ensure app type is Web App and you have an active Ads account |
| 400 Bad Request | Missing required parameters | Check the API documentation for required fields |
| Rate limiting | Too many requests in short time | Add a 1-second delay between calls |
| No data returned | Wrong date range or no campaigns active | Verify campaign status and date format (YYYY-MM-DD) |
If you are working with multiple advertising accounts, a practical proxy option for Reddit workflows can help you manage regional restrictions or team access without exposing your home IP.
Practical Example: Weekly Ad Performance Report
Let me walk you through a real scenario.
You run three campaigns targeting different subreddits. Every Monday at 9 AM, you want a Slack message with last week’s spend and CTR.
Here is the workflow:
- Generate token – script runs OAuth2 authentication
- Fetch campaigns – GET
/me/campaigns - Pull report – GET
/me/reportswithstart_dateandend_date - Filter and format – extract spend and CTR for each campaign
- Send to Slack – POST to your webhook URL
This takes about 30 seconds of API time, saves you 15 minutes of manual dashboard clicking, and reduces the chance of copy-paste errors.
Practical Takeaway
The Reddit Marketing API is not complicated once you get past the OAuth setup. The hardest part is the initial authentication configuration. After that, you are just making HTTP requests.
Start small. Get one endpoint working first (campaign list). Then add reporting. Then automate.
And always keep your API credentials and tokens in a secure, environment-specific location. A privacy browser for separate accounts and a proxy for Reddit for region-specific testing are not extras—they are hygiene for anyone running real campaigns at scale.
FAQ
Q: Do I need a Reddit Ads account to use the Marketing API?
A: Yes. The Marketing API is specifically for advertising data. You cannot access it with a personal Reddit account that has no active ads account.
Q: Can I use the Marketing API to post organic content?
A: No. The Marketing API only handles advertising operations. For organic posting, you need the Reddit Data API, which has different endpoints and rate limits.
Q: My token expires after one hour. How do I automate long-running scripts?
A: Implement token refresh using the refresh token returned during initial authentication. Store it securely and generate a new access token before each call sequence.
Q: Why am I getting a 403 error when I try to fetch campaign data?
A: Most likely your app was registered as “script” instead of “web app”. Delete the app and re-register with the correct type. Also verify that the account used for authentication has active ads.

