Skip to content

Reddit Ads

Your agent promotes the Reddit post that already earned replies, in the subreddits where your buyers talk, signed in as you.

Connect
Sign in once, 1 grant
Runs through
A browser agent
First run
Find the subreddits that hold the threads on your problem, about 0.03¢
Sites
Reddit
Campaign.create
You, to your agent

Build a $150 Reddit test promoting my rent-tracking answer in r/Landlord and r/PropertyManagement.

curl -X POST "https://api.sb/leaseline.app/campaigns/create?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"venue":"reddit","objective":"traffic","audience":{"subreddits":["r/Landlord","r/PropertyManagement"]},"budget":{"amount":150,"currency":"USD","per":"test"},"promote":"posts/reddit-rent-tracking-answer"}'
npx startup-builder do Campaign.create --try --data '{"venue":"reddit","objective":"traffic","audience":{"subreddits":["r/Landlord","r/PropertyManagement"]},"budget":{"amount":150,"currency":"USD","per":"test"},"promote":"posts/reddit-rent-tracking-answer"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Campaign.create({ venue: 'reddit', objective: 'traffic', audience: { subreddits: ['r/Landlord', 'r/PropertyManagement'] }, budget: { amount: 150, currency: 'USD', per: 'test' }, promote: 'posts/reddit-rent-tracking-answer' })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Campaign.create({ venue: 'reddit', objective: 'traffic', audience: { subreddits: ['r/Landlord', 'r/PropertyManagement'] }, budget: { amount: 150, currency: 'USD', per: 'test' }, promote: 'posts/reddit-rent-tracking-answer' })
Response
{
  "$type": "Campaign",
  "mode": "try",
  "stored": false,
  "venue": "reddit",
  "adGroups": [
    {
      "subreddit": "r/Landlord",
      "budget": 75
    },
    {
      "subreddit": "r/PropertyManagement",
      "budget": 75
    }
  ],
  "promoting": "posts/reddit-rent-tracking-answer",
  "readAt": "3,000 impressions per ad group",
  "runsBy": "browser",
  "steps": 19
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

Connect once

  1. Call Integration.connect with system: 'ads' and venue: 'reddit'; a browser window opens on Reddit Ads Manager.
  2. Sign in with your Reddit account and pick the ad account; the session is saved to your browser profile.
  3. Set the spend on your standing approval with Mandate.authorize; Reddit bills your ad account, never the platform.
GrantWhat it unlocksScope
Your saved Ads Manager sessionCampaigns, ad groups, promoted posts, budgets and results, in Reddit’s own screensbrowser session: ads.reddit.com
ToDo this
PauseIntegration.pause holds every run that needs your Reddit Ads Manager session; the session stays saved.
ReconnectIntegration.reconnect opens a browser window where you sign in to Reddit Ads Manager once more; the saved session replaces the old one.
DisconnectIntegration.revoke deletes the saved Reddit Ads Manager session; every Post and reply it made stays in your records.

What your agents do

AskVerbRuns throughPrice
Build a $150 campaign in r/Landlord and r/PropertyManagement, signed in as me.Campaign.createA browser agentAbout 1.6¢ a step
Promote my answer that earned 30 replies, as it is, signed in as me.Ad.createA browser agentAbout 1.6¢ a step
Pause the weaker ad group, signed in as me.Campaign.updateA browser agentAbout 1.6¢ a step
Show me impressions, clicks and signups by subreddit, signed in as me.Metric.queryA browser agentAbout 1.6¢ a step

Calls on your own account are free; Reddit bills your spend directly.

Reading this site’s public data needs no account: Keyword.search is a Data call (the three ways a call runs).

What it holds

NounThe account’s objectWhenWhich side leads
Campaigncampaign and ad groupsYour agent builds itYour records
Adpromoted postYour agent promotes a post; Reddit’s review sets its statusYour records
MessagecommentSomeone comments on itThe account

Events and webhooks

DirectionEvent
EmitsCampaign.created, Campaign.updated, Ad.created, Entry.posted, Message.created

Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).

Limits

WhatLimitCall
Ad reviewReddit reviews every ad; a rejection comes back as venue-rejected with the reasonAd.create
Budget floorThe agent reads the minimum Ads Manager shows for your account before it builds, and a budget under it refuses with venue-rejectedCampaign.create
Comments on a promoted postStay open; each one reaches you as a Message, and your agent drafts the answerEvery call
SpendYour standing approval holds the cap; a change past it waits with over-mandateCampaign.update

Start here

MoveThe rule
StructureOne campaign, one ad group per subreddit cluster (the 2 to 5 communities where your answers drew replies), promoting the post that already earned replies.
Budget$150 for the first test, split evenly across the ad groups, and no more until one ad group sends a signup.
CreativePromote the post as it is, with the title it earned replies under; a promoted post reads as a post, so it needs no ad copy.
Kill ruleAt 3,000 impressions, pause an ad group with under half the other’s CTR; with no signup at $150, stop and keep answering threads instead.
BenchmarkSource
$150 across 2 ad groups for the first testOur planning number
Judge each ad group at 3,000 impressionsOur planning number
Promote only a post that earned 10 or more replies on its ownOur planning number

Field map

Our fieldReddit Ads’s fieldNotesCalls
Campaign.objectivecampaign objectivePicked in Ads Manager: traffic sends readers to your page; leads bids toward your signup eventCampaign.create, Campaign.update, Ad.create
Campaign.targetingad group community targetingThe subreddits, by nameCampaign.create
Campaign.budgetad group budgetNone.Campaign.create, Campaign.update, Ad.create
Campaign.startsAtad group start date and timeNone.Campaign.create
Campaign.endsAtad group end date and timeNone.Campaign.create, Campaign.update
Campaign.statecampaign and ad group statuslive is active, paused pausedCampaign.update
Campaign.bidad group bid strategylowest-cost is automatic bidding; a costPer cap is a cost cap on clicks or conversionsCampaign.create, Campaign.update
Campaign.keywordsad group keyword targetingShows the ad beside conversations that use the words, across subredditsCampaign.create
Ad.headlinepost titleA promoted post keeps the title it earned replies underAd.create
Ad.landingUrldestination URLNone.Ad.create
Ad.callToActioncall to action buttonSuch as Learn More or Sign UpAd.create
Ad.mediathe promoted post’s image or videoAs posted; a new image means a new postAd.create

What try does here

Returns the campaign and the promoted post as Ads Manager will hold them, with the steps the browser agent would take; no session opens and nothing is created.

How long a connection lasts

A connection lasts as long as the site keeps your saved session signed in; the platform checks the session before every run.

The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with needs-reauth.

Formats

SiteFormatLimits
RedditText or link postTitle 300 characters, which cannot be edited after posting
RedditCommentText under a post or a comment; it has no title
RedditPromoted postA post already on your account, promoted with the title it earned replies under

Plays and strategies

KindWhere
PlaysPaid social, Promote winners
StrategiesPaid

Used by

Reference

4 calls, each with its path and price
CallPathPrice
Campaign.createPOST /campaigns/createAbout 1.6¢ a step
Ad.createPOST /ads/createAbout 1.6¢ a step
Campaign.updatePOST /campaigns/updateAbout 1.6¢ a step
Metric.queryPOST /metrics/queryAbout 1.6¢ a step

Contents