> ## Documentation Index
> Fetch the complete documentation index at: https://docs.markifact.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Ad Squad

> Creates a Snapchat Ads ad squad under a campaign with optimization goal, bid, budget, schedule, targeting, and placement

Creates a Snapchat Ads ad squad under a campaign with optimization goal, bid, budget, schedule, targeting, and placement. Supports Dynamic Product Ads by associating a product set during creation. Bid and budget amounts are entered in the ad account currency and converted to micro-currency automatically.

| | |
| - | - |
| **App** | Snapchat Ads |
| **Operation ID** | `snapchat_ads_create_ad_squad` |
| **Type** | Action |
| **Connection** | `snapchat_ads` (required) |
| **Credits per run** | 1 |
| **Agent / MCP tool** | Yes |
| **Requires approval** | Yes (write operation) |

## Inputs

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `account` | DynamicAccount | Yes | - | Select the Snapchat Ads account that owns the campaign. |
| `campaign_id` | string or SelectItem | Yes | - | ID of the Snapchat campaign to create the ad squad in. |
| `ad_squad_name` | string | Yes | - | Name of the ad squad (sent to Snapchat as 'name'). Max 375 characters. |
| `type` | string or SelectableOption | No | `{'value': 'SNAP_ADS', 'label': 'Snap Ads'}` | Ad squad type: SNAP\_ADS (default), LENS, or FILTER. |
| `status` | string or SelectableOption | No | `{'value': 'PAUSED', 'label': 'Paused'}` | Status when the ad squad is created: ACTIVE or PAUSED. Default: PAUSED. |
| `optimization_goal` | string or SelectableOption | Yes | - | Optimization goal for delivery. The available goals depend on the parent campaign's objective\_v2\_type and where the conversion happens (web, app, or lead form). PIXEL\_\* goals require pixel\_id. APP\_\* goals should set event\_sources to the Snap App ID. |
| `bid_strategy` | string or SelectableOption | No | `{'value': 'AUTO_BID', 'label': 'Auto Bid'}` | Bidding strategy: AUTO\_BID (default), LOWEST\_COST\_WITH\_MAX\_BID, or TARGET\_COST. LOWEST\_COST\_WITH\_MAX\_BID and TARGET\_COST require bid\_amount. |
| `bid_amount` | number | No | - | Bid in the ad account's currency (for example 2 for \$2.00), sent to Snapchat as bid\_micro. Required for LOWEST\_COST\_WITH\_MAX\_BID and TARGET\_COST strategies; not used with AUTO\_BID. Minimum 0.01; maximum varies by currency. |
| `daily_budget` | number | No | - | Daily budget in the ad account's currency, sent as daily\_budget\_micro. Minimum 5. Provide either daily\_budget or lifetime\_budget, unless the parent campaign uses Smart Budgets (pacing\_level CAMPAIGN), where budgets are managed at the campaign level. |
| `lifetime_budget` | number | No | - | Lifetime budget in the ad account's currency, sent as lifetime\_budget\_micro. Requires start\_time and end\_time. Provide either daily\_budget or lifetime\_budget. |
| `start_time` | integer or string | No | - | Optional start as a Unix timestamp or ISO datetime string. Required when using lifetime\_budget. |
| `end_time` | integer or string | No | - | Optional end as a Unix timestamp or ISO datetime string. Must be after start\_time. Required when using lifetime\_budget. |
| `targeting` | object or string | Yes | - | The Snapchat targeting spec for this ad squad, as a JSON object sent to Snapchat as-is. geos is required; every other key is optional and Snapchat applies its own defaults when omitted. Use snapchat\_ads\_search\_targeting to look up valid IDs for any dimension (region\_id, metro\_id, postal\_code, interest category\_id, languages, carriers, device makes, and more). Common keys: - geos (required): list of geo objects, e.g. \[\{"country\_code": "us"}]. Supports region\_id, metro\_id, postal\_code, and operation (INCLUDE/EXCLUDE). - demographics: list, e.g. \[\{"min\_age": "18", "max\_age": "34", "gender": "MALE"}]. Also supports languages and advanced\_demographics. - devices: list, e.g. \[\{"os\_type": "iOS", "os\_version\_min": "11.3"}]. Also supports connection\_type, carrier\_id, marketing\_name. - interests: list, e.g. \[\{"category\_id": \["SLC\_36"]}] for Snap Lifestyle Categories. - segments: list for custom audiences, e.g. \[\{"segment\_id": \["\<id>"], "operation": "INCLUDE"}]. - product\_audiences: Dynamic Product Ads retargeting audiences. Each row can contain product\_set, event\_type, retention\_seconds, and operation; Snapchat validates the accepted shape and relationship to product\_properties. - locations: list for location categories with circles. - regulated\_content: boolean, set true for age-regulated ads. - enable\_targeting\_expansion: boolean. - auto\_expansion\_options: object with interest\_expansion\_option and custom\_audience\_expansion\_option. Example: \{"regulated\_content": false, "geos": \[\{"country\_code": "us"}], "demographics": \[\{"min\_age": "18"}]} |
| `product_properties` | object or string | No | - | Dynamic Product Ads only: associates a product set with the ad squad, as a low-level JSON object sent to Snapchat as-is. Snapchat's current DPA documentation uses product\_set\_id; Snapchat validates supported keys and relationships with targeting.product\_audiences. This property can only be set during ad squad creation. Example: \{"product\_set\_id": "da17a495-0392-448f-b4f4-f027ecdcb794"} |
| `placement_v2` | object or string | No | - | Placement spec as a JSON object, sent to Snapchat as-is. Defaults to \{"config": "AUTOMATIC"} when omitted. Keys: config (AUTOMATIC or CUSTOM), platforms (e.g. \["snapchat"]), snapchat\_positions (for CUSTOM config: INTERSTITIAL\_USER, INTERSTITIAL\_CONTENT, INSTREAM, FEED, CAMERA, INTERSTITIAL\_SPOTLIGHT, PUBLIC\_STORIES\_INSTREAM). LIMITED\_INVENTORY brand safety is only compatible with PUBLIC\_STORIES\_INSTREAM, INTERSTITIAL\_CONTENT, INTERSTITIAL\_SPOTLIGHT, or AUTOMATIC placement. Example: \{"config": "CUSTOM", "platforms": \["snapchat"], "snapchat\_positions": \["INTERSTITIAL\_USER"]} |
| `conversion_window` | string or SelectableOption | No | - | Delivery optimization window: SWIPE\_28DAY\_VIEW\_1DAY (Snapchat default) or SWIPE\_7DAY. |
| `pixel_id` | string | No | - | Snap Pixel ID associated with the ad squad. Required for PIXEL\_\* optimization goals. |
| `pacing_type` | string or SelectableOption | No | - | Pacing: STANDARD (Snapchat default) or ACCELERATED. |
| `child_ad_type` | string or SelectableOption | No | - | Ad type the ad squad will contain. If omitted, Snapchat sets it automatically from the first ad added, after which it becomes immutable. |
| `forced_view_setting` | string or SelectableOption | No | - | Whether the ad squad contains creatives that can serve as a Commercial: FULL\_DURATION, SIX\_SECONDS, or NONE. |
| `story_ad_creative_type` | string or SelectableOption | No | - | Creative type for Dynamic Story Ads: APP\_INSTALL, WEB\_VIEW, or DEEP\_LINK. Required when using Dynamic Story Ads. |
| `inventory_option` | string or SelectableOption | No | - | Brand safety inventory filter, sent as brand\_safety\_config: \{inventory\_option: ...}. FULL\_INVENTORY (Snapchat default) maximizes reach; LIMITED\_INVENTORY shows ads only near content that passed additional moderation, which may decrease reach and increase costs. |
| `measurement_provider_names` | string or SelectableOption | No | - | Approved third-party measurement provider, sent as a one-item list: DOUBLEVERIFY. |
| `event_sources` | object or string | No | - | Snap App ID associated with the ad squad, as a JSON object sent as-is. Shape: \{"MOBILE\_APP": \["\<snap\_app\_id>"]}. Recommended for APP\_INSTALLS and DEEP\_LINK goals, and a prerequisite for SKAdNetwork enrollment and App Install state targeting. |
| `skadnetwork_properties` | object or string | No | - | SKAdNetwork enrollment at creation time, as a JSON object. Keys: enroll\_action (OPT\_IN), enable\_skoverlay (boolean). Enrollment requires event\_sources set to the Snap App ID, iOS-only device targeting, and an available Apple Campaign ID. Enrolled ad squads cannot use APP\_REENGAGE\_OPEN or APP\_REENGAGE\_PURCHASE goals, or the TARGET\_COST bid strategy. Example: \{"enroll\_action": "OPT\_IN", "enable\_skoverlay": true} |
| `cap_and_exclusion_config` | object or string | No | - | Frequency cap and exclusion spec, as a JSON object sent to Snapchat as-is, following the Snapchat frequency cap specification, e.g. \{"frequency\_cap\_config": \[\{"frequency\_cap\_count": 2, "time\_interval": 24, "frequency\_cap\_interval": "HOURS", "frequency\_cap\_type": "IMPRESSIONS"}]}. When set inside an Auction campaign, all ads in the ad squad must be of the same ad type (no Multi-format Delivery). |
| `ad_scheduling_config` | object or string | No | - | Schedule for running ads, as a JSON object sent to Snapchat as-is, following the Snapchat ad scheduling specification (days and hours of the week when ads are eligible to serve). |
| `campaign_budget_optimization_properties` | object or string | No | - | Per-ad-squad spend constraints, only when the parent campaign uses Smart Budgets (pacing\_level CAMPAIGN), as a JSON object with micro-currency integers passed as-is. Keys: daily\_min\_spend\_micro, daily\_max\_spend\_micro (daily budget campaigns) or lifetime\_min\_spend\_micro, lifetime\_max\_spend\_micro (lifetime cap campaigns); daily and lifetime constraints cannot be mixed. Minimum spend must not exceed 90% of the campaign budget. Example: \{"daily\_min\_spend\_micro": 5000000, "daily\_max\_spend\_micro": 20000000} |
| `reach_goal` | integer | No | - | Reach & Frequency bookings only: reach goal matching the forecasting request. Requires impression\_goal and a RESERVED campaign. Markifact sets reach\_and\_frequency\_status to PENDING and delivery\_constraint to REACH\_AND\_FREQUENCY automatically. |
| `impression_goal` | integer | No | - | Reach & Frequency bookings only: impression goal matching the forecasting request. Requires reach\_goal. |

### SelectItem

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `value` | string | Yes | - | The value of the selectable item. |
| `label` | string | Yes | - | The label of the selectable item, used for display purposes. If not provided, defaults to the value. |

### SelectableOption

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `value` | string | Yes | - | |
| `label` | string | Yes | - | |

## Output

**Type**: `Dict`

Returns created Snapchat ad squad details.

**Fields**: `ad_squad_id`, `ad_squad_name`, `campaign_id`, `type`, `status`, `optimization_goal`, `product_properties`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.