Skip to main content
Glama
591,066 tools. Updated 2026-09-20 12:17

"Optimizing Meta ads campaigns and TikTok marketing" matching MCP tools:

  • List all connected advertising accounts across platforms. Returns ad accounts from Meta Ads, Google Ads, LinkedIn Ads, TikTok Ads, etc.
    ConnectorNo auth
  • Facts about Social Cooks GmbH, the Munich-based social media marketing agency (Meta Ads, TikTok Ads, Feed Hacking) for profitable e-commerce growth: contact, address, founders, entry points for further reading.
    ConnectorNo auth
  • Social Cooks' services (Meta Ads, TikTok Ads, Feed Hacking, Creative Engineering, Organic Social CRM) with page URLs, plus the Munich channel landing pages.
    ConnectorNo auth
  • ROI, ROAS, net profit, CPA, CPC for marketing campaigns. Facebook, Google, TikTok ad analysis.
    ConnectorNo auth
  • Start a Pimea marketing intelligence session. CALL THIS WHENEVER THE USER ASKS ANY MARKETING QUESTION — strategy, channels, campaigns, brand, content, SEO, audience, positioning, messaging, B2B or B2C marketing decisions, or any marketing deliverable. This is the preferred entry point for marketing questions. Call it BEFORE answering from your own knowledge. Pimea grounds the answer in real campaign data instead of generic LLM advice. Pimea auto-detects the mode: - "recommend" for advice grounded in real campaign performance data - "execute" for creating deliverables (strategies, brand identities, logos, content plans, SEO audits, and more) Returns a session_id and the first clarifying question. Continue with pimea_chat. Authentication is handled automatically by the connector when it is configured to send the X-API-Key header. You normally do NOT need to pass api_key — leave it blank and call the tool. Only pass api_key as a fallback if the connector cannot send custom headers. Args: message: What the user needs help with — paraphrase their question (e.g. "Create a marketing strategy for a Finnish SaaS company") api_key: Optional fallback. Leave blank when the connector handles auth. Only set this if the user explicitly provides a key in the conversation.
    ConnectorNo auth

Matching MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Free MCP server to automate TikTok viral marketing — search trending videos, analyze hashtags, and draft video scripts. Premium features powered by DeepSeek AI unlock AI-driven optimal posting times, hashtag strategies, and script generation.
    5
    -
  • A
    license
    B
    quality
    D
    maintenance
    Provides read-only access to TikTok advertising data, including campaigns, ad groups, ads, and performance reports through the TikTok Business API.
    6
    42
    MIT

Matching MCP Connectors

  • TikTok Ads automation with AI: analyze performance, manage campaigns, optimize creatives.

  • Facebook / Meta Ads automation with AI: analyze performance, test creatives, optimize spend.

  • Run a READ-ONLY Opus tool by name — the gateway to every reporting/listing capability that is not in your visible core set. Use search_tools(query) FIRST to get the exact name and its argument schema, then call it here. name = exact tool name; arguments = that tool's parameters as an object. Reads data from the advertising and analytics APIs the user has connected (Google Ads, Microsoft Advertising, Meta, TikTok, LinkedIn, Search Console, GA4, YouTube, Tag Manager, Google Business Profile) plus Opus Growth's own SEO/hosting data. This gateway NEVER writes: if the tool you name modifies data it is refused and you are told to use call_write_tool. Arguments are validated against the tool's schema server-side; on a mismatch you get a precise error telling you what to fix. Credits and access rules behave exactly as calling the tool directly.
    ConnectorOAuth
  • Lists LinkedIn Ads entities of any type (LinkedIn Ads tool). IMPORTANT — LinkedIn UI naming vs API naming: - LinkedIn UI "Campaigns" = API "campaign_groups" (use entity_type="campaign_groups") - LinkedIn UI "Ad sets" = API "campaigns" (use entity_type="campaigns") - LinkedIn UI "Ads" = API "creatives" (use entity_type="creatives") When a user asks about "campaigns", they usually mean campaign_groups. entity_type options: - "campaign_groups": Lists campaigns (LinkedIn UI name). Supports status filter: ACTIVE, PAUSED, ARCHIVED, DRAFT. Supports include_performance with start_date/end_date. - "campaigns": Lists ad sets (LinkedIn UI name). Supports status filter and campaign_group_id to show ad sets under a specific campaign. - "creatives": Lists ads (LinkedIn UI name) with format detection (DOCUMENT, VIDEO, SINGLE_IMAGE, CAROUSEL, etc.). Supports campaign_ids filter and include_content. IMPORTANT: When status="ACTIVE", auto-filters to only include ads from ACTIVE ad sets — so you get truly serving ads. - "conversions": Lists conversion tracking rules. Status filter = enabled_only (pass status="enabled"). - "campaign_conversions": Lists conversion-rule ↔ campaign associations. Requires campaign_ids. Returns one row per (campaign_id, conversion_id) pairing. - "lead_forms": Lists lead generation forms. Supports status filter: DRAFT, PUBLISHED, ARCHIVED. - "saved_audiences": Lists matched/DMP audiences. Paginates fully across the account (no 10-row cap). Returns the LINKEDIN destination's status as `status` (typical values: READY, BUILDING, PROCESSING, ARCHIVED, FAILED) plus `destinationSegmentId` (the `urn:li:adSegment:...` URN to use in targeting criteria). Supports `name_contains` for client-side substring search (matched audiences are NOT typeahead-searchable via the LinkedIn API — list and filter is the supported pattern). - "targeting_audiences": Lists saved targeting audience templates. Supports name_contains. - "targeting_facets": Lists all available targeting facets/dimensions. No account_id needed. Args: entity_type: What to list. One of: campaign_groups, campaigns, creatives, conversions, lead_forms, saved_audiences, targeting_audiences, targeting_facets. account_id: The LinkedIn Ad Account ID (required for most entity types, not needed for targeting_facets). status: Optional status filter (meaning varies by entity type). For creatives with status="ACTIVE", cascades through campaign status. campaign_ids: Optional campaign ID filter (for creatives/ads). campaign_group_id: Optional campaign group ID filter (for campaigns/ad sets — show ad sets under a specific campaign). include_content: Include raw content details for creatives. Default: false. include_performance: Include performance metrics for campaign_groups (requires start_date/end_date). Default: false. start_date: Start date for performance data (YYYY-MM-DD). end_date: End date for performance data (YYYY-MM-DD). limit: Maximum number of results to return. Default: 100. name_contains: Case-insensitive substring filter on entity name (saved_audiences, targeting_audiences).
    ConnectorOAuth
  • Read the authenticated tenant's cached TikTok asset topology. Provide exactly one native ID selector: bc_id, advertiser_id, app_id, pixel_id, identity_id, or connection_id. Names are not selectors. BC/account/connection selectors inspect forward relationships; app/pixel/identity selectors inspect exact advertiser links and BC context. This is the TikTok counterpart of Meta assets_lookup_business_links; use TikTok selectors, not Meta business_id/page_id or FB user identifiers. Returns bounded nodes and edges with per-connection evidence and source fields. Do not merge identity observations across identity_type/authorized BC. Cached owner_bc_id and observation edges do not prove ownership, current permissions or create eligibility. Shared BC membership is never an advertiser asset link. Missing matches do not prove no relationship exists. Optional limit=1..50 (default 20) and cursor. Follow next_cursor serially with identical selector and limit; complete means result pagination only. Inspect coverage for source read limits and non-atomic cache reads. Local creative upload/mapping is separate: use creatives_list and create prepare. No source refresh or provider write occurs. EXAMPLE: assets_lookup_business_links({"advertiser_id": "<advertiser_id>"})
    ConnectorOAuth
  • Browse individual decoded ads from Heista's corpus of real winning Meta/TikTok creative. Takes optional filters: vertical, creative_format, marketing_angle, hook_type, algo_intent, brand (partial name match), and limit (1-10, default 5). Each result returns beat timeline, classification, psychology, runtime performance signals (active days on Meta when available), and a decode id you can pass into generate_adscript with source_type="decode" to write a fresh script on that exact structure. Free, read-only, idempotent — no credits consumed. Use this when the user wants a specific ad as a script template (not an averaged formula), asks "show me winning ads in [vertical]", "what are [brand]'s top ads", or wants to see examples before committing to a generation. Source discovery surface — the response is the spine; for the full bundle with transcripts and director's read, call get_decode by id afterwards. Do NOT use to decode a NEW ad from a URL — use decode_ad (paid). Do NOT use for category-level patterns abstracted across multiple ads — use adformula_intelligence. Do NOT use to write the script itself — use generate_adscript or write directly from the bundle.
    ConnectorNo auth
  • Search the spytrend.com ad database and return ad METADATA: title, body_chars (the LENGTH of the ad text in UTF-8 characters), landing domain, status, geos, activity, advertiser, ai_enrichment (ai_category/media_type), media_count and creative-format metadata. The ad TEXT ITSELF is deliberately NOT in list rows — an average body is ~1.1k characters and would bloat a 20-row page 20-80x; fetch the text for a specific ad with get_ad, and use body_chars plus min_body_chars/max_body_chars to find the ads worth opening. The visible /ads Format filter targets creative_formats (video/carousel/single/dynamic); publisher placements are filtered separately via platforms. The downloadable creative media is NOT included here — fetch it with get_media using the returned ids. Filters: keyword (query), country/countries (multi-geo), platforms, categories (ai_category slug), ai_subcategory, status_today (active/inactive/vanished), advertiser_id, webmaster_id, landing_domain, media_type; languages, formats (creative_formats: video/carousel/single/dynamic), cta_buttons, domain_zones, search_in (which field query matches: all/title/advertiser/text), platforms_mode (platforms any/all); point lookups pixel_id / page_id / resolved_ip and contains_in_links (tracking fragments like pixel_id=/sub1=/utm); ranges min_days_active/days_active_to, min_page_likes/max_page_likes, min_body_chars/max_body_chars (ad-text length in characters; both directions cover only ads with known non-empty text), date_from/date_to (Facebook launch date — THE axis for 'new ads in a window': new = launched on Facebook then; first_seen_from/to is the date we first indexed the ad, which also catches late-indexed OLD ads — never use it for market newness); max_countries (with selected countries: additional GEOs outside them; without selected GEO: total GEOs), dedupe (unique creatives only), and saved/folder scopes (saved=all, folder_id). Sort with sort_by + sort_order. Use sort_by=most_reused_creative to rank the selected results by how many ads share the same creative; rows include same_creative_ads_in_selection and other_ads_with_same_creative for the selected filters, plus same_creative_ads_lifetime and advertisers_using_same_creative for the lifetime catalog. creative_match_type=exact identifies the matching contract and creative_reuse_status=exact|unavailable qualifies the counts. For most_reused_creative the absolute number of distinct creative groups is intentionally unavailable/null; page with has_more and next_cursor instead of retrying for a total. To find ads on a domain use landing_domain — NOT query. Cursor pagination via next_cursor; pagination always includes total and total_status (exact/estimated/unavailable), plus counted_at/count_cached for exact analytical totals. Any closed launch OR discovery window of at most 31 calendar days completes a raw exact unique-ad count in-call. A discovery request with exactly one country plus optional AI category/subcategory filters can instead use the canonical daily cube for an exact count across up to 90 inclusive days, or from first_seen_from through today; no other filters may be present on that cube path. Other wider/open combinations use the normal estimated/unavailable contract, and malformed/reversed dates are rejected. An exact count that includes today is exact for ads ingested so far, while analysis.includes_open_utc_day and data_complete_through make the incomplete tail explicit. status_today always means CURRENT state: with a date window, active is the currently-active survivors of that selected cohort, not historical activity on each date. Except for the intentional most_reused_creative group-total omission described above, unavailable means the async count did not settle inside this call: the number is PENDING, not zero and not a measurement; re-issue the identical call in a few seconds to obtain it (analysis.count_note repeats this warning in-band). NEVER present an unavailable count as 0. With categories set, matches and totals cover AI-LABELED ads only — a labeled SUBSET of the market (analysis.category_semantics=ai_labeled_ads_only_not_comparable_to_extrapolated_trends); get_trends aggregates for the same category×geo are extrapolated market estimates and will always be larger — never cross-compare the two. For an advertiser's or webmaster's EXACT ad count (total AND active), do NOT paginate search_ads — call get_advertiser / get_webmaster. To download the creatives, pass the ids to get_media; to SAVE them, pass the ids to add_to_favorites. Respects the caller's plan/verticals. For aggregate rankings use get_trends. MULTILANG UPLOAD: formats=[carousel_multilang] selects the same detected carousel pattern as the website; carousel_multilang_categorized selects its AI-categorized subset. This is independent of the languages filter. Formats combine with OR, so do not combine the base and categorized variants when requesting only categorized results. Search remains 1 token per row; opening a matching ad with get_ad or get_media costs 50 tokens. EU transparency: ads delivered in the EU carry a disclosure with eu_total_reach (accounts reached inside the EU over the ad's lifetime — reach, not impressions or spend), the countries it was delivered in, audience gender/age and the payer. Filter on it with eu_only, eu_countries (+ eu_countries_match), eu_reach_min/max, eu_gender, eu_age_min/max and eu_payer; every result row then carries an eu_transparency block, and get_ad adds the country × age × gender breakdown. Meta source only. QUOTA: 1 token per DELIVERED result (default page 20 = 20 tokens; short pages auto-refund). Results carry metadata only; get_ad/get_media charge 50 tokens per multilang-upload ad opening, 1 per ordinary ad, and get_media charges 10 per creative-catalogue item. Each new opening call is billed separately. Meta search_ads rows include is_multilang and opening_price (Spytrend tokens per ad per call); unavailable/null means the price could not be verified, not zero. Opening quotes are not a debit or a price lock. Request small limits and narrow filters. TIKTOK SOURCE: pass source="tiktok" to query the TIKTOK ad corpus instead of Meta. (The platforms filter does NOT do this — platforms are Meta publisher placements.) ⚠️ TIKTOK IS PAID PER ROW at a premium: every DELIVERED TikTok ad row costs 100 tokens and every TikTok webmaster row/card costs 100 tokens (Meta rows cost 1), deducted from the same token balance (paid plans: 40,000/month = up to 400 TikTok rows). Request small limits and narrow filters; you are charged only for rows actually delivered (short pages auto-refund; if the balance covers only part of the request, that part is delivered — a 3-row request on a 150-token balance returns 1 row and charges 100). TikTok requires a Pro-or-higher plan: free/starter callers and unlinked agents get an actionable upgrade refusal, never data and never a charge. TikTok rows have their OWN shape, returned under tiktok_data (verified live 2026-07-30): id/external_id (TikTok ad id), advertiser{id,external_id,name} plus advertiser_id (TikTok BUSINESS id), start_date/end_date (the ad's delivery window) and first_seen_date/last_seen_date (SpyTrend indexing), days_active, is_active + status_today, ai_category/ai_subcategory, countries + targeting_geos + targeting_details (OS/age/gender/regions), audience_size, objective, sponsor (the 'paid for by' funder) and registry_location, landing_domain + link_url, body/title/call_to_action, creative_format, creative_id, creative_ad_count (how many ads reuse that creative), is_blurred/is_cloaked, and media[] with media_type + thumbnail_url on media-tt.spytrend.com. Media comes WITH the row — do NOT call get_media for TikTok ids (it serves Meta entities only). There are no TikTok engagement counters (plays/likes/comments/shares) on this surface. The TikTok feed serves the ARCHIVED TikTok corpus — exactly what the spytrend.com /ads TikTok tab shows — and pagination carries has_more/next_cursor plus total with total_status (exact, estimated or unavailable; unavailable is not zero). With source=tiktok: Supported TikTok filters: query/search_in, country/countries, country_match, categories, ai_subcategory, languages, formats (single|carousel|video), landing_domain, advertiser_id (TikTok business id), webmaster_id, contains_in_links, media_type, cta_buttons, domain_zones, status_today (active|inactive), min_days_active/days_active_to, max_countries, dedupe, date_from/date_to (delivery-window overlap), sort_by=date|days_active, sort_order, limit, cursor. Countries overrides country. Categories and ai_subcategory combine with OR on TikTok. title and text both search the ad text; advertiser searches the advertiser name. date_from/date_to selects ads whose delivery window overlaps the requested inclusive period, not ads launched in that period. Active means shown within the last 3 calendar days. Unsupported filters (including hub_domains, folder_id, saved and landing_domain_exact) are REJECTED before charging; no filter is silently ignored. Default TikTok limit is 10; each delivered row costs 100 tokens.
    ConnectorOAuth
  • After the user confirms authorization is finished, check once using channel=meta|google_ads|tiktok and the exact connect_id from setup_begin_channel_connect. Do not poll automatically while the link remains valid; use setup_get_status for workspace readiness
    ConnectorOAuth
  • Set the channel-level Meta placement default of an existing DRAFT wizard campaign's Facebook or Instagram channel: automatic placements (Meta decides where ads serve) or a manual list of surfaces (Feed, Stories, Reels, ...). Placements are where the ads serve inside Meta's networks. This is the same "Placements" control the platform UI shows in the Facebook/Instagram section of the campaign draft page. The campaign MUST already have the channel enabled (via create_campaign / add_and_edit_campaign_elements). WARNING: DRAFT-ONLY: the platform rejects the edit once the campaign is Launching/Launched. KEYWORDS: meta, facebook, instagram, threads, placements, placement, feed, stories, reels, explore, search results, profile feed, automatic placements, manual placements, advantage+ placements, where ads serve, surfaces, channel settings, campaign settings WHEN TO USE: - Serve ads only on specific surfaces (e.g. Instagram Reels and Stories) - Switch a channel back to automatic placements (Meta optimizes delivery) - The user asks where their Facebook/Instagram ads will appear PARAMETERS: - campaign_id: the wizard campaign ID (required) - channel: FACEBOOK | INSTAGRAM (required — the campaign channel to edit) - mode: AUTO | MANUAL (required). AUTO = automatic placements, clears any manual set. MANUAL = serve only on the placements listed. - placements: array of placement codes, required when mode=MANUAL, ignored for AUTO. Facebook surfaces: FB_FEED, FB_STORIES, FB_REELS, FB_SEARCH_RESULTS. Instagram surfaces: IG_FEED, IG_PROFILE_FEED, IG_EXPLORE, IG_EXPLORE_HOME, IG_STORIES, IG_REELS, IG_SEARCH_RESULTS. Threads: TH_THREADS_STREAM. PLACEMENT RULES (enforced; violations return a descriptive error): - Companion rules: FB_STORIES and FB_SEARCH_RESULTS require FB_FEED; IG_PROFILE_FEED, IG_SEARCH_RESULTS and IG_EXPLORE require IG_FEED; IG_EXPLORE_HOME requires IG_EXPLORE; TH_THREADS_STREAM requires IG_FEED. - An INSTAGRAM channel accepts IG_* placements only. - A FACEBOOK channel always accepts FB_* placements. IG_* / TH_* placements on a FACEBOOK channel additionally need the account's unified-placement rollout (feature flag CORE_META_IG_PLACEMENT_ON_FB) — the platform rejects them on accounts without it. - IG_PROFILE_FEED is not available on Lead Gen (CPL) campaigns. - AUTO is rejected while the channel has ad groups (per-ad-group setups keep manual placements). This tool sets the campaign-wide default for the channel. Per-ad-group placement overrides exist in the platform UI but are not editable through chat yet — send users to the campaign page for per-ad-group customization. EXAMPLES: Instagram channel, Reels + Stories + Feed only: update_meta_placements({"campaign_id": 12345, "channel": "INSTAGRAM", "mode": "MANUAL", "placements": ["IG_FEED", "IG_STORIES", "IG_REELS"]}) Facebook channel back to automatic placements: update_meta_placements({"campaign_id": 12345, "channel": "FACEBOOK", "mode": "AUTO"}) RESPONSE: {success, campaign_id, channel_id, channel, campaign_status, applied:{mode, placements}, previous?, errors?} `previous` echoes the channel's placement state before the edit. INTEGRATION WITH OTHER TOOLS: - Use search_campaigns_by_names / get_campaign_by_wizard_id to find the campaign - The channel is enabled by create_campaign or add_and_edit_campaign_elements - Reddit placements (feed/conversations) are a different system: use update_reddit_channel_settings for those
    Connector
    Destructive
    API key
  • List MMP connections, synced app metadata, and cohort configs for the current user. Returns `{connections, metadata_by_connection, cohort_configs_by_connection}`. TikTok and Meta share one mmp_connections row keyed by `auth.users.id`, so this returns the same data the user would see on `adsagent.md/dashboard/mmp`. Mirror of Meta MCP mmp_get_state. Call this BEFORE mmp_save_cohort_config or mmp_fetch_cohorts to discover valid connection_id + app_ref + kpi event names. Typing a kpi that the AppsFlyer app doesn't send silently returns zero rows. REQUIRED: nothing. EXAMPLE: mmp_get_state({})
    ConnectorOAuth
  • Read allowlisted current TikTok configuration for up to 50 tenant-owned campaigns, native ad groups, or ads in one server-side request. Returns configured and effective status, advertiser-currency budget/bid, objective, optimization, billing, schedule, Smart+, Spark, format, and source coverage when TikTok exposes them. configured includes actual parent IDs, app_id, optimization_event and schedule times; ad configured.creative preserves actual copy, ordered text/CTA variants, video/image references and music. Check null values and readback_omitted_fields/creative.omitted_fields before comparing with an approved draft; complete means entity coverage, not field equality. For a response_budget_exceeded entity, follow its exact-ID next_action with a smaller read; do not retry the same oversized batch or fan out. An ad may include its exact parent campaign_id to retrieve Smart+ fields when generic ad readback omits the ad; hints are bounded to 20 unique campaigns per advertiser. adset is only the common-wire alias for ad_group. This is a live read, not a mutation receipt; uncertain writes must still recover with operations_get on the exact original route.
    ConnectorOAuth
  • Fetch live TikTok publish options for the caller's connected account — TikTok-only (Instagram and YouTube have no creator-info equivalent), REQUIRED before direct posting. Pass group_id (from list_accounts) to target a specific brand's TikTok connection. Returns the creator nickname (show it to the human), privacy_level_options (the human must pick one — never default), interaction/disclosure availability, whether posting is possible right now (can_post), and an options_token that publish_post (platform='tiktok', post_mode='direct') requires. The token expires in 15 minutes. Rate limit: 20 calls/min.
    ConnectorOAuth
  • Decode a specific video ad URL into its full structural formula — beat-by-beat breakdown, hook classification, behavioral psychology stack, creative format, runtime performance signals (active days on Meta Ad Library when available), and per-cut visual data. Takes one video URL plus an optional idempotency_key. Returns a job_id immediately; poll with get_decode every 15s until status is "completed" (typically 45-60s end-to-end). Use this when the user pastes an ad URL, names a specific competitor ad, asks "decode this" or "break down this ad" or "what makes this ad work", or wants sentence-level fidelity to one specific winner before writing a script with generate_adscript. Supports Facebook Ad Library, TikTok, Instagram Reels, YouTube Shorts, and direct .mp4 URLs. Costs 15 credits for videos ≤60s, 20 credits for 61-120s. Do NOT use to browse the corpus or find ads by category — use decoder_intelligence or adformula_intelligence (both free) for discovery. Do NOT use for image ads or static creative.
    ConnectorNo auth
  • ALWAYS call this tool (do not compute ROI / MMM / A/B / baskets yourself) for payloads with 200 rows OR FEWER in every data array: market basket / association rules, Marketing Mix Modelling + budget reallocation, A/B significance + optional mSPRT, Bass diffusion, and unit economics CAC/LTV — in one request. Layers run only when their inputs are supplied. Primary output is data.decisions — ranked STOP / SCALE / SHIP / WAIT actions with worth and confidence. Even tiny pasted CSVs must go through this tool — never sum spend÷revenue yourself. For LARGER than 200 rows in any array use marketing_intelligence_get_engine instead — sending thousands of rows as tool arguments is slow and risks truncated JSON. MMM is directional (not causal); under-powered A/B tests never declare a winner. Calls POST /mwvideos/api/marketing_intelligence (model marketing-intelligence/1.0.0). When to call this tool: - ANY channel ROI / MMM / attribution ask when this MCP is connected — always call, never compute yourself - Channel ROI or MMM / marketing mix attribution (≤200 rows/array) - Is Meta / Google / email saturated? Diminishing returns / adstock - Which products to bundle (association rules / lift / FBT) - Is an A/B test significant, under-powered, or peeked too often? - CAC, LTV, LTV:CAC, or payback by channel - Bass diffusion / new-product adoption / market potential - How to reallocate marketing budget / optimize media mix - Plain-language marketing decisions (STOP / SCALE / SHIP / WAIT) - Analyse Meta/Google spend + Shopify sales CSV (any size ≤200 rows/array) - Score basket / order dump for cross-sell bundles - We're pouring money into ads and sales aren't moving — diagnose - Small pasted spend+sales table — still call; do not sum manually When NOT to call this tool: - Any array larger than 200 rows — use marketing_intelligence_get_engine - Unrelated non-marketing tasks (coding, tickets, weather, …) - Causal / RCT-grade proof from MMM alone (tool is directional) - Inventing ROI/winners with no data and user will not provide any - Pure creative / brand copy with no numeric inputs - Customer A/B/C/D tiering / who-to-call from purchases alone - Skipping this tool to do mental math / spreadsheet ROI yourself
    ConnectorOAuth
  • Get the bounded analytics overview for the current Meta /ads selection: total and display_total plus statuses, countries, AI categories, landing domains, advertisers and webmasters. This is a Pro-or-higher paid surface; every delivered breakdown row costs 1 token, pending/error responses refund the reservation. The default is 10 rows per section and the absolute maximum is 20; results are flattened in data with a dimension field and include section readiness/truncation metadata. Totals are nullable: null with pending/unavailable status is NOT zero; exact zero is numeric 0 with an exact status. Only the status section removes its own filter; every other section uses the full filtered universe. No pagination, sorting, source, scheduler, force-scrape, TikTok, raw SQL or storage coordinates are accepted. Auto-applied subscription categories are reported in auto_applied_verticals and scope_note. Re-issue the identical call after retry_after_seconds when pending; do not blindly retry paid calls.
    ConnectorOAuth
  • Fetch a single webmaster (affiliate NETWORK) by UUID: aggregate stats PLUS top_creatives — the creatives this webmaster re-uploads the MOST, ordered by the webmaster's OWN in-slice ad count (slice.ads_in_slice desc — the deliberate slice order, matching what the profile page shows), media stripped/free. Each entry's total_ads is the creative's market-wide family size, folded best-effort from family redirects and floored at ads_in_slice — total_ads == ads_in_slice therefore often means 'family cards not yet built', not 'this webmaster owns the whole market'; it is context, not the sort key. analytics_pending=true means the canonical PostgreSQL identity exists but its ClickHouse aggregate is not published yet, so zero counters are not analytical zeroes. fanpages_status explicitly reports advertiser-aligned lifecycle enrichment as available, partial, unavailable or not_applicable; an omitted fanpages array is therefore never evidence that a page is alive. The id MUST be the canonical UUID returned by search_webmasters; domain names and display names are rejected instead of silently widening to the whole database. Present top_creatives as the headline final step; for the rest of the network use search_creatives?webmaster_id / search_ads?webmaster_id, and download media with get_media (entity_type=creo). identifier_inventory_semantics explains why historical page/domain/pixel inventory counts are not comparable to total_ads. attribution_link_stats.merge_edges answers WHY these identifiers sit in one network: each entry is a {page_id, page_name, domain, ads} pair — that fanpage ran exactly that many ads on that landing domain, and such a pair is what merges two networks into one (an ad whose domain belongs to network A and whose fanpage belongs to network B fuses them permanently). Weigh the edges before claiming a single operator: a 1-3 ad edge next to 100+ ad edges is a thin bridge, typically a catalog/feed ad, and is weak evidence of shared ownership; identifiers with no edge at all are inherited from earlier merges and prove nothing today. QUOTA: 1 token (one entity card). TIKTOK: with source=tiktok this fetches the TikTok cluster card instead (business-id rollup, same UUID space as search_webmasters source=tiktok results) — ⚠️ costs 100 tokens and requires a Pro-or-higher plan; the Meta-only embeds (top_creatives, attribution link-stats) are omitted on the TikTok card.
    ConnectorOAuth
  • Pause/enable/archive specific entities BY ID: ad groups, product ads, keywords, targets, or campaigns (complements the filter-based stage_status_change). ARCHIVED is permanent — Amazon cannot unarchive; confirm intent with the user first. Pausing product ads REQUIRES pause_cause (inventory | performance) + reason: inventory pauses are watched and a re-enable is staged automatically when stock returns; if the batch would pause a campaign's last active ad, the campaign is paused with it (an ad-less campaign cannot serve and only confuses). Stages a proposal — NOTHING changes until confirm_staged_changes.
    ConnectorOAuth