Skip to main content
Glama

Draft Reddit ad group changes

update_reddit_ad_group

Draft changes to a Reddit ad group — budget, bid, run dates, weekly schedule, targeting.

Budget (daily_budget or lifetime_budget + end_time) is checked against max_daily_budget; bid_value against max_bid_increase_pct. Targeting lists REPLACE the current value of each key passed (each takes the full list); omitted keys are preserved. Ids/names come from search_reddit_targeting. Budget and schedule of an ad group in a campaign-budget-optimization campaign are set on the campaign (update_reddit_campaign). Returns a preview with a plan_id showing old → new per field; nothing changes until confirm_and_apply applies it.

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

Input Schema

NameRequiredDescriptionDefault
nameNoNew ad group name; empty keeps the current one.
genderNoFEMALE or MALE; empty leaves gender targeting unchanged.
devicesNoFull list of device 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"). [] clears it (every device).
bid_typeNoCPC, CPM, CPV, CPV6 or CPV15.
carriersNoFull list of mobile carrier ids (from search_reddit_targeting kind "carriers", e.g. "O2_DEUTSCHLAND"), checked against Reddit's carrier list. [] clears it.
end_timeNoNew end, same formats as start_time.
keywordsNoFull list of keywords to target.
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}. [] clears it (deliver at any time). Hours apply in each viewer's local time, not the account time zone.
bid_valueNoNew bid in account currency.
interestsNoFull list of interest ids to target.
languagesNoFull list of language codes (ISO 639-1, upper-cased automatically, e.g. "DE").
locationsNoPlacements, FEED and/or COMMENTS_PAGE (conversation pages); cannot be an empty list.
platformsNoFull list of platforms: ALL, DESKTOP, DESKTOP_LEGACY, MOBILE_NATIVE, MOBILE_WEB, MOBILE_WEB_3X or SHREDTOP.
start_timeNoNew start, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare YYYY-MM-DD means 00:00 UTC that day.
view_modesNoFull list of feed layouts: ALL, CARD, CLASSIC, COMPACT or IMMERSIVE. [] clears it.
ad_group_idYesReddit ad group id (from get_reddit_ad_groups).
communitiesNoFull list of community (subreddit) names to target.
bid_strategyNoBIDLESS, MANUAL_BIDDING, MAXIMIZE_VOLUME or TARGET_CPX.
daily_budgetNoNew daily budget in account currency (positive). Mutually exclusive with lifetime_budget; the budget type (daily vs lifetime) cannot change after publishing.
geolocationsNoFull list of geolocation 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.
lifetime_budgetNoNew lifetime budget in account currency (positive). Needs an end_time (passed or already set); compared to max_daily_budget by its per-day share.
expand_targetingNoWhether Reddit may expand delivery beyond the targeting; omitted leaves it unchanged.
excluded_keywordsNoFull list of keywords to exclude.
excluded_interestsNoFull list of interest ids to exclude (Reddit marks this field deprecated). [] clears it.
custom_audience_idsNoFull list of custom audiences to target (from get_reddit_audiences). It narrows the ad group to those people. [] clears it.
excluded_communitiesNoFull list of community names to exclude.
excluded_geolocationsNoFull list of geolocation ids to exclude.
excluded_custom_audience_idsNoFull list of custom audiences to exclude, e.g. existing customers. [] clears it.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / custom_audience_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Full list of custom audiences to target (from\nget_reddit_audiences). It narrows the ad group to those people.\n[] clears it."
      +}
    • addedInput schema / properties / excluded_custom_audience_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Full list of custom audiences to\nexclude, e.g. existing customers. [] clears it."
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / carriers
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Full list of mobile carrier ids (from\nsearch_reddit_targeting kind \"carriers\", e.g. \"O2_DEUTSCHLAND\"),\nchecked against Reddit's carrier list. [] clears it."
      +}
    • addedInput schema / properties / devices
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Full list of device targets, objects like {\"type\":\n\"MOBILE\", \"os\": \"IOS\", \"min_version\": \"16\"} (type DESKTOP or\nMOBILE; optional os ANDROID or IOS, major OS versions with iOS at\nleast 14, and label_map {make: [models]} with makes/models from\nsearch_reddit_targeting kind \"devices\"). [] clears it (every\ndevice)."
      +}
    • addedInput schema / properties / excluded_interests
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Full list of interest ids to exclude (Reddit\nmarks this field deprecated). [] clears it."
      +}
    • addedInput schema / properties / view_modes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Full list of feed layouts: ALL, CARD, CLASSIC, COMPACT\nor IMMERSIVE. [] clears it."
      +}
  3. Changed23 schema fields changed
    • 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_id / description
      Added value: +"Reddit ad group id (from get_reddit_ad_groups)."
    • addedInput schema / properties / bid_strategy / description
      Added value: +"BIDLESS, MANUAL_BIDDING, MAXIMIZE_VOLUME or TARGET_CPX."
    • addedInput schema / properties / bid_type / description
      Added value: +"CPC, CPM, CPV, CPV6 or CPV15."
    • addedInput schema / properties / bid_value / description
      Added value: +"New bid in account currency."
    • addedInput schema / properties / communities / description
      Added value: +"Full list of community (subreddit) names to target."
    • addedInput schema / properties / daily_budget / description
      Added value: +"New daily budget in account currency (positive).\nMutually exclusive with lifetime_budget; the budget type (daily vs\nlifetime) cannot change after publishing."
    • addedInput schema / properties / end_time / description
      Added value: +"New end, same formats as start_time."
    • addedInput schema / properties / excluded_communities / description
      Added value: +"Full list of community names to exclude."
    • addedInput schema / properties / excluded_geolocations / description
      Added value: +"Full list of geolocation ids to exclude."
    • addedInput schema / properties / excluded_keywords / description
      Added value: +"Full list of keywords to exclude."
    • addedInput schema / properties / expand_targeting / description
      Added value: +"Whether Reddit may expand delivery beyond the\ntargeting; omitted leaves it unchanged."
    • addedInput schema / properties / gender / description
      Added value: +"FEMALE or MALE; empty leaves gender targeting unchanged."
    • addedInput schema / properties / geolocations / description
      Added value: +"Full list of geolocation ids to target (e.g. \"DE\" or\n\"DE:2874225\")."
    • addedInput schema / properties / interests / description
      Added value: +"Full list of interest ids to target."
    • addedInput schema / properties / keywords / description
      Added value: +"Full list of keywords to target."
    • addedInput schema / properties / languages / description
      Added value: +"Full list of language codes (ISO 639-1, upper-cased\nautomatically, e.g. \"DE\")."
    • addedInput schema / properties / lifetime_budget / description
      Added value: +"New lifetime budget in account currency (positive).\nNeeds an end_time (passed or already set); compared to\nmax_daily_budget by its per-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 / name / description
      Added value: +"New ad group name; empty keeps the current one."
    • addedInput schema / properties / platforms / description
      Added value: +"Full list of platforms: ALL, DESKTOP, DESKTOP_LEGACY,\nMOBILE_NATIVE, MOBILE_WEB, MOBILE_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}. [] clears it (deliver at any time). Hours apply in\neach viewer's local time, not the account time zone."
    • addedInput schema / properties / start_time / description
      Added value: +"New start, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare\nYYYY-MM-DD means 00:00 UTC that day."
  4. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only carry the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true); the description adds the substance: validation against max_daily_budget and max_bid_increase_pct, list-replacement semantics, and the preview/plan_id staging model. That staging behavior is the single most important thing to know and it is stated plainly, consistent with destructiveHint=false.

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

Conciseness4/5

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

Front-loaded with a one-line summary, then constraint and workflow detail in compact clauses; little is wasted given 29 parameters. It is dense but every sentence (validation caps, replace semantics, campaign routing, staging) carries operational weight. Slightly heavy for a single prose block.

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?

Covers the full lifecycle an agent needs: where targeting ids come from, the replace/preserve rule, the validation constraints, the campaign-level exception, and the preview→confirm_and_apply handoff. With an output schema present, return-format details are correctly left out, and the docs link closes the loop.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning on top: budget mutual exclusivity and per-day comparison for lifetime budgets, the REPLACE-vs-preserved rule for all list parameters, and validation caps. It doesn't restate per-param enum values, which the schema handles.

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?

Names a specific verb and resource ('Draft changes to a Reddit ad group') and enumerates the mutability surface: budget, bid, run dates, weekly schedule, targeting. It clearly differentiates from update_reddit_campaign for the campaign-budget-optimization case. The only gap is that it doesn't disambiguate from the sibling 'draft_reddit_ad_group' (create vs. update), which a reader must infer from the 'changes to an ad group' phrasing.

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

Usage Guidelines5/5

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

Explicit routing conditions are given: budget/schedule for a campaign-budget-optimization campaign must go through update_reddit_campaign, targeting ids/names come from search_reddit_targeting, and the change is inert until confirm_and_apply applies the plan_id. It also states the replace-vs-preserve rule for omission, so the agent knows how to invoke it in the right sequence.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.