Skip to main content
Glama
AdLoop: Google Ads, Reddit Ads & GA4

AdLoop: Google Ads, Reddit Ads & GA4

Draft a Reddit ad group

draft_reddit_ad_group

Draft a paused Reddit ad group preview with targeting, budget and bid validation; returns a plan_id and payload, and nothing changes until confirmed.

Instructions

Draft a new Reddit ad group (created PAUSED) — returns a PREVIEW.

Required: campaign_id, ad_group_name, conversion_pixel_id and at least one targeting list (geolocations, communities, interests or keywords — ids/names from search_reddit_targeting). For non-CBO campaigns also daily_budget (or lifetime_budget + end_time), bid_strategy and bid_type. Budgets are checked against max_daily_budget; keywords and geolocations are pre-validated with Reddit. Returns a preview with a plan_id, the payload and warnings; nothing changes until confirm_and_apply applies it.

Reddit Ads API: https://ads-api.reddit.com/docs/v3/

Input Schema

NameRequiredDescriptionDefault
genderNoFEMALE or MALE; empty means all genders.
devicesNoDevice targets, objects like {"type": "MOBILE", "os": "IOS", "min_version": "16"} (type DESKTOP or MOBILE; optional os ANDROID or IOS, major OS versions with iOS at least 14, and label_map {make: [models]} with makes/models from search_reddit_targeting kind "devices"). Omitted means every device; APP_INSTALLS campaigns take exactly one.
bid_typeNoCPC, CPM, CPV, CPV6 or CPV15. Required for non-CBO campaigns.
carriersNoMobile carrier ids (from search_reddit_targeting kind "carriers", e.g. "O2_DEUTSCHLAND"), checked against Reddit's carrier list. Omitted means every carrier.
end_timeNoEnd, same formats as start_time.
keywordsNoKeywords to target; Reddit refuses keywords that are not brand-safe.
scheduleNoWeekly delivery windows ("time of day" in Ads Manager), a list of blocks like {"days": "MON-FRI", "start_hour": 13, "end_hour": 23} (day names, hours 0-23, end_hour inclusive) or the native {"start_day": "FRI", "start_hour": 22, "end_day": "SAT", "end_hour": 3}. Omitted means delivery at any time. Hours apply in each viewer's local time, not the account time zone. Not allowed in CBO campaigns, whose schedule overrides every ad group.
bid_valueNoBid in account currency; MANUAL_BIDDING and TARGET_CPX (target cost per result) need it.
interestsNoInterest ids to target.
languagesNoLanguage codes (ISO 639-1, upper-cased automatically, e.g. "DE"). Empty means every language.
locationsNoPlacements, FEED and/or COMMENTS_PAGE (conversation pages); cannot be an empty list.
platformsNoALL, DESKTOP, DESKTOP_LEGACY, MOBILE_NATIVE, MOBILE_WEB, MOBILE_WEB_3X or SHREDTOP.
start_timeNoStart, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare YYYY-MM-DD means 00:00 UTC that day. Empty means now.
view_modesNoFeed layouts: ALL, CARD, CLASSIC, COMPACT or IMMERSIVE. Omitted uses Reddit's default.
campaign_idYesReddit campaign id (from get_reddit_campaigns).
communitiesNoCommunity (subreddit) names to target.
bid_strategyNoBIDLESS, MANUAL_BIDDING, MAXIMIZE_VOLUME or TARGET_CPX. Required for non-CBO campaigns; in CBO campaigns it must match the campaign's.
daily_budgetNoDaily budget in account currency (positive). Required for non-CBO campaigns unless lifetime_budget is given; not allowed in CBO campaigns. Mutually exclusive with lifetime_budget.
geolocationsNoGeolocation ids to target (e.g. "DE" or "DE:2874225").
ad_account_idNoReddit ad account id (from list_reddit_accounts). Empty uses reddit.ad_account_id from the config.
ad_group_nameYesName of the new ad group.
lifetime_budgetNoLifetime budget in account currency (positive); requires end_time and is compared to max_daily_budget by its per-day share.
expand_targetingNoWhether Reddit may expand delivery beyond the targeting; omitted uses Reddit's default.
excluded_keywordsNoKeywords to exclude.
optimization_goalNoThe pixel event to optimize for (PURCHASE, SIGN_UP, LEAD, PAGE_VISIT, ...). Empty in a CBO campaign inherits the campaign's.
excluded_interestsNoInterest ids to exclude (Reddit marks this field deprecated).
conversion_pixel_idYesPixel id (Reddit rule; from get_reddit_pixels).
custom_audience_idsNoCustom audiences to target (from get_reddit_audiences), e.g. website visitors for retargeting.
excluded_communitiesNoCommunity names to exclude.
excluded_geolocationsNoGeolocation ids to exclude.
excluded_custom_audience_idsNoCustom audiences to exclude, e.g. people who already bought.
view_through_conversion_typeNoThe conversion attribution window: SEVEN_DAY_CLICKS (conversions within 7 days of a click) or SEVEN_DAY_CLICKS_ONE_DAY_VIEW (also within 1 day of a view). Empty: Reddit's default SEVEN_DAY_CLICKS_ONE_DAY_VIEW for CONVERSIONS and CATALOG_SALES campaigns, which require one. Under campaign budget optimization the ad group inherits the campaign's.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.37.0
    • addedInput schema / properties / view_through_conversion_type
      Added value: +{
      +  "default": "",
      +  "description": "The conversion attribution window:\nSEVEN_DAY_CLICKS (conversions within 7 days of a click) or\nSEVEN_DAY_CLICKS_ONE_DAY_VIEW (also within 1 day of a view).\nEmpty: Reddit's default SEVEN_DAY_CLICKS_ONE_DAY_VIEW for\nCONVERSIONS and CATALOG_SALES campaigns, which require one. Under\ncampaign budget optimization the ad group inherits the campaign's.",
      +  "type": "string"
      +}
  2. Changed31 schema fields changedv0.27.1
    • addedInput schema / properties / ad_account_id / description
      Added value: +"Reddit ad account id (from list_reddit_accounts).\nEmpty uses reddit.ad_account_id from the config."
    • addedInput schema / properties / ad_group_name / description
      Added value: +"Name of the new ad group."
    • addedInput schema / properties / bid_strategy / description
      Added value: +"BIDLESS, MANUAL_BIDDING, MAXIMIZE_VOLUME or TARGET_CPX.\nRequired for non-CBO campaigns; in CBO campaigns it must match the\ncampaign's."
    • addedInput schema / properties / bid_type / description
      Added value: +"CPC, CPM, CPV, CPV6 or CPV15. Required for non-CBO\ncampaigns."
    • addedInput schema / properties / bid_value / description
      Added value: +"Bid in account currency; MANUAL_BIDDING and TARGET_CPX\n(target cost per result) need it."
    • addedInput schema / properties / campaign_id / description
      Added value: +"Reddit campaign id (from get_reddit_campaigns)."
    • addedInput schema / properties / carriers
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Mobile carrier ids (from search_reddit_targeting kind\n\"carriers\", e.g. \"O2_DEUTSCHLAND\"), checked against Reddit's\ncarrier list. Omitted means every carrier."
      +}
    • addedInput schema / properties / communities / description
      Added value: +"Community (subreddit) names to target."
    • addedInput schema / properties / conversion_pixel_id / description
      Added value: +"Pixel id (Reddit rule; from get_reddit_pixels)."
    • addedInput schema / properties / custom_audience_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Custom audiences to target (from\nget_reddit_audiences), e.g. website visitors for retargeting."
      +}
    • addedInput schema / properties / daily_budget / description
      Added value: +"Daily budget in account currency (positive). Required\nfor non-CBO campaigns unless lifetime_budget is given; not allowed\nin CBO campaigns. Mutually exclusive with lifetime_budget."
    • addedInput schema / properties / devices
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Device targets, objects like {\"type\": \"MOBILE\", \"os\":\n\"IOS\", \"min_version\": \"16\"} (type DESKTOP or MOBILE; optional os\nANDROID or IOS, major OS versions with iOS at least 14, and\nlabel_map {make: [models]} with makes/models from\nsearch_reddit_targeting kind \"devices\"). Omitted means every\ndevice; APP_INSTALLS campaigns take exactly one."
      +}
    • addedInput schema / properties / end_time / description
      Added value: +"End, same formats as start_time."
    • addedInput schema / properties / excluded_communities / description
      Added value: +"Community names to exclude."
    • addedInput schema / properties / excluded_custom_audience_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Custom audiences to exclude, e.g.\npeople who already bought."
      +}
    • addedInput schema / properties / excluded_geolocations / description
      Added value: +"Geolocation ids to exclude."
    • addedInput schema / properties / excluded_interests
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Interest ids to exclude (Reddit marks this field\ndeprecated)."
      +}
    • addedInput schema / properties / excluded_keywords / description
      Added value: +"Keywords to exclude."
    • addedInput schema / properties / expand_targeting / description
      Added value: +"Whether Reddit may expand delivery beyond the\ntargeting; omitted uses Reddit's default."
    • addedInput schema / properties / gender / description
      Added value: +"FEMALE or MALE; empty means all genders."
    • addedInput schema / properties / geolocations / description
      Added value: +"Geolocation ids to target (e.g. \"DE\" or \"DE:2874225\")."
    • addedInput schema / properties / interests / description
      Added value: +"Interest ids to target."
    • addedInput schema / properties / keywords / description
      Added value: +"Keywords to target; Reddit refuses keywords that are not\nbrand-safe."
    • addedInput schema / properties / languages / description
      Added value: +"Language codes (ISO 639-1, upper-cased automatically,\ne.g. \"DE\"). Empty means every language."
    • addedInput schema / properties / lifetime_budget / description
      Added value: +"Lifetime budget in account currency (positive);\nrequires end_time and is compared to max_daily_budget by its\nper-day share."
    • addedInput schema / properties / locations / description
      Added value: +"Placements, FEED and/or COMMENTS_PAGE (conversation\npages); cannot be an empty list."
    • addedInput schema / properties / optimization_goal / description
      Added value: +"The pixel event to optimize for (PURCHASE,\nSIGN_UP, LEAD, PAGE_VISIT, ...). Empty in a CBO campaign inherits\nthe campaign's."
    • addedInput schema / properties / platforms / description
      Added value: +"ALL, DESKTOP, DESKTOP_LEGACY, MOBILE_NATIVE, MOBILE_WEB,\nMOBILE_WEB_3X or SHREDTOP."
    • addedInput schema / properties / schedule / description
      Added value: +"Weekly delivery windows (\"time of day\" in Ads Manager), a\nlist of blocks like {\"days\": \"MON-FRI\", \"start_hour\": 13,\n\"end_hour\": 23} (day names, hours 0-23, end_hour inclusive) or the\nnative {\"start_day\": \"FRI\", \"start_hour\": 22, \"end_day\": \"SAT\",\n\"end_hour\": 3}. Omitted means delivery at any time. Hours apply in\neach viewer's local time, not the account time zone. Not allowed\nin CBO campaigns, whose schedule overrides every ad group."
    • addedInput schema / properties / start_time / description
      Added value: +"Start, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare\nYYYY-MM-DD means 00:00 UTC that day. Empty means now."
    • addedInput schema / properties / view_modes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Feed layouts: ALL, CARD, CLASSIC, COMPACT or IMMERSIVE.\nOmitted uses Reddit's default."
      +}
  3. Addedv0.14.0

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well past the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true): it discloses that the object is created PAUSED, that nothing mutates until confirm_and_apply, that budgets are validated against max_daily_budget, that keywords/geolocations are pre-validated by Reddit, and that the response carries plan_id, payload and warnings. That is precisely the side-effect/lifecycle context an agent needs before calling a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the two facts that matter most (PAUSED, PREVIEW), then requirements, then conditional rules, then validation and return shape. Five short paragraphs, no repetition of schema enum details, and the API docs link is a single trailing line. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 32-parameter write tool this covers what the structured fields cannot: the create-PAUSED lifecycle, the preview/plan_id handshake with confirm_and_apply, server-side validation behavior, and the conditional required sets. An output schema exists, and the description still notes what the preview contains, so nothing an agent needs to call it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% across 32 parameters, so per-field semantics are fully handled by the schema and the baseline is 3. The description adds some genuine cross-field value (budget/bid requirements for non-CBO, lifetime_budget requiring end_time, 'at least one targeting list'), but it leaves the CBO-vs-non-CBO determination and the many optional targeting fields entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line gives a specific verb and resource ('Draft a new Reddit ad group') plus two critical qualifiers: created PAUSED and returns a PREVIEW. It implicitly separates itself from confirm_and_apply and from update_reddit_ad_group ('new'), but never names the closest siblings (estimate_reddit_ad_group, update_reddit_ad_group) that an agent might otherwise confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the required inputs (campaign_id, ad_group_name, conversion_pixel_id, at least one targeting list) and the conditional set for non-CBO campaigns, and routes the agent to search_reddit_targeting for ids/names. It also makes the draft→confirm workflow explicit. What's missing is a negative rule: when to use estimate_reddit_ad_group instead, or that existing ad groups belong to update_reddit_ad_group.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools