Set Up a Campaign
You can programmatically set up campaigns using the Reddit Ads API. This lets you create ad groups to target your audience, organize the ads you display on Reddit, and measure your results in the Ads Manager.
All ads created using the API are subject to our Ads API Terms and Ads Policy.
Looking for an easier way to set up campaigns? Try creating a campaign in the Ads Manager using Simple Create or Advanced Campaign Creation.
Before you start
- Set up a Reddit Ads account and request access to the Ads API
- Create the content for your ads. This includes text, landing pages, and click or impression trackers. Learn about our ad specifications.
- Find your ad account ID. Here's how.
1. Create a campaign
Create a campaign by calling the Create Campaign endpoint. Enable is_campaign_budget_optimization (CBO) to automatically allocate budget across all ad groups based on performance.
App installs, conversions, and catalog sales objectives aren't eligible for CBO.
- Campaign budget optimization (CBO)
- Ad group budgets (non-CBO)
- Awareness
- Traffic
- Video views
Awareness campaign (CBO)
{
"data": {
"name": "",
"configured_status": "",
"objective": "IMPRESSIONS",
"start_time": "Datehh : min : s",
"end_time": "Datehh : min : s",
"bid_strategy": "",
"bid_type": "CPM",
"goal_type": "",
"goal_value": ,
"is_campaign_budget_optimization": true,
"conversion_pixel_id":""
}
}Traffic campaign (CBO)
{
"data": {
"name": "",
"configured_status": "",
"objective": "CLICKS",
"start_time": "Datehh : min : s",
"end_time": "Datehh : min : s",
"is_campaign_budget_optimization": true,
"bid_strategy": "",
"bid_type": "CPC",
"goal_type": "",
"goal_value": ,
"conversion_pixel_id":""
}
}Video view campaigns can only serve video ads.
Video views campaign
{
"data": {
"name": "",
"configured_status": "",
"objective": "VIDEO_VIEWABLE_IMPRESSIONS",
"start_time": "Datehh : min : s",
"end_time": "Datehh : min : s",
"bid_strategy": "",
"bid_type": "CPV6",
"goal_type": "",
"optimization_goal": "",
"goal_value": ,
"is_campaign_budget_optimization": true,
"conversion_pixel_id":""
}
}See the remaining SKAdNetwork ID quota for your app with Get SKAdNetwork Availability.
- Standard
- App installs
Standard campaign (non-CBO)
{
"data": {
"name": "",
"configured_status": "",
"objective": "",
"is_campaign_budget_optimization": false
}
}App Installs campaigns (non-CBO)
{
"data": {
"name": "",
"configured_status": "",
"objective": "APP_INSTALLS",
"is_campaign_budget_optimization": false,
"app_id": ""
}
}Campaign objectives
| Objective | Purpose | Cost |
|---|---|---|
IMPRESSIONS (awareness) | Awareness of your brand or product. Optimized for impressions. | Pay for cost-per-1,000 impressions (CPM) |
CLICKS (traffic) | Traffic to your website. | Pay for cost-per-click |
CONVERSIONS | Conversions (valuable actions) on your website. | Pay for cost-per-click |
VIDEO_VIEWABLE_IMPRESSIONS (video views) | Views for your video. | Pay for cost-per-view (CPV) |
APP_INSTALLS | Installs for your mobile app. | Pay for clicks |
CATALOG_SALES | Sales of your retail products and services. Required for product and dynamic product ads. Optimized for clicks. | Pay for cost-per-click (CPC) |
LEAD_GENERATION (beta) | Increase potential customer interest by capturing valuable leads with forms on Reddit. | Pay for cost-per-click (CPC) |
2. Set up ad groups
Granularly measure your campaign's performance and define audiences, targeting, and schedules for your ads using ad groups. Create an ad group by calling the Create Ad Group endpoint.
- Campaign budget optimization (CBO)
- Ad group budgets (non-CBO)
With CBO, bidding is handled at the campaign level. Set bid_strategy and bid_value to null to inherit the campaign's settings.
- Awareness
- Traffic
- Video views
Awareness ad group (CBO)
{
"data": {
"campaign_id": "",
"configured_status": "",
"name": "",
"bid_type": "CPM",
"start_time": "Datehh : min : s",
"end_time": "Datehh : min : s",
"bid_strategy": null,
"bid_value": null,
"conversion_pixel_id":""
}
}Traffic ad group (CBO)
{
"data": {
"campaign_id": "",
"configured_status": "",
"name": "",
"bid_type": "CPC",
"start_time": "Datehh : min : s",
"end_time": "Datehh : min : s",
"bid_strategy": null,
"bid_value": null,
"conversion_pixel_id":""
}
}Video views ad group (CBO)
{
"data": {
"campaign_id": "",
"configured_status": "",
"name": "",
"bid_type": "CPV6",
"start_time": "Datehh : min : s",
"end_time": "Datehh : min : s",
"bid_strategy": null,
"bid_value": null,
"optimization_goal": "",
"conversion_pixel_id":""
}
}- App installs
- Conversions
- Video views
- Catalog Sales
- Traffic
- Awareness
- Android
- iOS
Android ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPM",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"configured_status": "",
"name": "",
"optimization_goal": "",
"targeting": {
"devices": [
{
"type": "MOBILE",
"os": "ANDROID"
}
],
"platforms": []
},
"conversion_pixel_id":""
}
}iOS ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPM",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"configured_status": "",
"name": "",
"optimization_goal": "",
"targeting": {
"devices": [
{
"type": "MOBILE",
"os": "IOS",
"min_version": ""
}
],
"platforms": []
},
"conversion_pixel_id":""
}
}optimization_goal must match an event your Pixel is tracking (or use CLICKS if the Pixel is not fully set up). See options in the parameter examples.
Conversions ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPM",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"optimization_goal": "",
"view_through_conversion_type": "SEVEN_DAY_CLICKS_ONE_DAY_VIEW",
"configured_status": "",
"name": "",
"conversion_pixel_id":""
}
}Video views ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPV6",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"configured_status": "",
"name": "",
"optimization_goal": "",
"conversion_pixel_id":""
}
}Learn how to create product sets.
- Static
- Dynamic
Static ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPC",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"product_set_id": "",
"view_through_conversion_type": "SEVEN_DAY_CLICKS_ONE_DAY_VIEW",
"optimization_goal": "",
"configured_status": "",
"name": "",
"shopping_type": "STATIC",
"conversion_pixel_id":""
}
}Dynamic ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPC",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"product_set_id": "",
"view_through_conversion_type": "SEVEN_DAY_CLICKS_ONE_DAY_VIEW",
"optimization_goal": "",
"configured_status": "",
"name": "",
"shopping_type": "DYNAMIC",
"shopping_targeting": {
"lookback_window_days": ,
"targeting_type": ""
},
"conversion_pixel_id":""
}
}Traffic ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPC",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"configured_status": "",
"name": "",
"conversion_pixel_id":""
}
}Awareness ad group (non-CBO)
{
"data": {
"bid_strategy": "",
"bid_type": "CPM",
"start_time": "Datehh : min : s",
"goal_value": ,
"bid_value": ,
"campaign_id": "",
"configured_status": "",
"name": "",
"conversion_pixel_id":""
}
}3. Create a post
Skip this step when creating catalog ads.
Create the contents of your ad with Create Structured Post Creation Job.
If the job status is SUCCESS, a post will be created. For other statuses:
CLIENT_ERROR: Fix the creative configuration and create a new job.SERVER_ERROR: The system ran into an error. Retry again later.
Check the status of your job with Get Structured Post Creation Job.
- Image
- Video
- Carousel
- Free-form
- Promoted Post
Image post
{
"data": {
"allow_comments": ,
"creative": {
"type": "IMAGE",
"headline": "",
"destination": {
"url": "",
"type": "URL"
},
"image": {
"media": {
"url": "",
"type": "URL"
}
},
"thumbnail": {
"media": {
"url": "",
"type": "URL"
}
}
}
}
}Video post
{
"data": {
"allow_comments": ,
"creative": {
"type": "VIDEO",
"headline": "",
"destination": {
"url": "",
"type": "URL"
},
"video": {
"media": {
"url": "",
"type": "URL"
}
},
"thumbnail": {
"media": {
"url": "",
"type": "URL"
}
}
}
}
}Carousel post
{
"data": {
"allow_comments": ,
"creative": {
"type": "CAROUSEL",
"headline": "",
"carousel": [
{
"destination": {
"url": "",
"type": "URL"
},
"image": {
"media": {
"url": "",
"type": "URL"
}
},
"caption": ""
},
{
"destination": {
"url": "",
"type": "URL"
},
"image": {
"media": {
"url": "",
"type": "URL"
}
},
"caption": ""
}
],
"thumbnail": {
"media": {
"url": "",
"type": "URL"
}
}
}
}
}Free-form (text) post
{
"data": {
"allow_comments": ,
"creative": {
"type": "TEXT",
"headline": "",
"body": "",
"text_format": ""
}
}
}Promoting a post has several limitations:
- Promoting a post creates an ad using the original post's content, including its headline. This freezes both the original and promoted post's voting and comments.
- When a destination URL is set, selecting the title and call-to-action goes to this URL. The comments entry opens the original post.
- Only community posts can be promoted with the API. Promote profile posts on Reddit.
Retrieve the community post ID
- Navigate to the post on Reddit.
- Copy the post URL.
- Copy the string between
/commentsand the post title.URL String https://www.reddit.com/r/NotARealBrand/comments/xxxxxxx/try_our_ramen/xxxxxxx - Prepend
t3_to the string.String Post ID xxxxxxxt3_xxxxxxx
Promoted Community Post
{
"data": {
"allow_comments": false,
"creative": {
"type": "PROMOTED_POST",
"headline": "My Promoted Community Post",
"post": {
"type": "PROMOTED_COMMUNITY_POST",
"post_id": "",
"destination": {
"url": "",
"type": "URL"
}
}
}
}
}4. Build ads
Create an ad with Create Ad.
- Standard
- Catalog sales
Standard ad
{
"data": {
"ad_group_id": "",
"name": "",
"post_id": "",
"click_url": "",
"configured_status": ""
}
}The API does not verify that product IDs on a shopping ad exist in the ad group’s product set—ensure IDs match your catalog.
Catalog sales ad
{
"data": {
"ad_group_id": "",
"post_id": "",
"name": "",
"configured_status": "",
"products": [
{
"product_id": ""
}
],
"shopping_creative": {
"destination_url": "",
"headline": "",
"allow_comments": ,
"call_to_action": "",
"second_line_cta": ""
}
}
}5. Test your ad
After building your ad, it will be reviewed. This process may take up to 48 business hours. Check your ad's status and rejection reason with Get Ad.
We strongly recommend visiting the preview_url link to ensure your ad looks right. This preview will expire at the date and time listed in preview_expiry.
You can set preview_expiry with Update Ad.
Once approved, monitor your ads at least once a week to optimize them:
- Dashboard: Measure impact and identify ways to improve your campaigns by viewing ad performance over time in the Ads Manager.
Get A Report: Generate a metrics report for up to three breakdowns based on the list of fields that you provide. Reports provide detailed insights and analytics on ad performance, audience engagement, and other relevant metrics. You can also use this endpoint to verify custom conversion events.