Skip to main content
Glama
604,444 tools. Updated 2026-09-23 20:49

"A platform for business and marketing metrics reporting and ad creative insights" matching MCP tools:

  • Get deduplicated creative count, first-discovered creative count and ad-plan count for one game, platform and explicit date range (maximum 180 days). Creative count uses lifetime overlap; first-discovered count uses first appearance within the range. No paging is needed. Always use this tool for platform totals rather than counting pages from discovery tools.
    ConnectorNo auth
  • Tracks hourly social engagement velocity (likes, shares, comments) across Twitter, LinkedIn, and Reddit for CMOs. Inputs include platform handles/subreddits and time range. Outputs engagement metrics, velocity trends, and platform-specific insights. Ideal for real-time marketing performance monitoring and competitive benchmarking. Keywords: social media analytics, engagement tracking, marketing KPIs, CMO dashboard.
    ConnectorNo auth
  • Tracks hourly social engagement velocity (likes, shares, comments) across Twitter, LinkedIn, and Reddit for CMOs. Inputs include platform handles/subreddits and time range. Outputs engagement metrics, velocity trends, and platform-specific insights. Ideal for real-time marketing performance monitoring and competitive benchmarking. Keywords: social media analytics, engagement tracking, marketing KPIs, CMO dashboard.
    ConnectorNo auth
  • Tracks hourly social engagement velocity (likes, shares, comments) across Twitter, LinkedIn, and Reddit for CMOs. Inputs include platform handles/subreddits and time range. Outputs engagement metrics, velocity trends, and platform-specific insights. Ideal for real-time marketing performance monitoring and competitive benchmarking. Keywords: social media analytics, engagement tracking, marketing KPIs, CMO dashboard.
    ConnectorNo auth
  • Account-level statistics and channel breakdown for a timeframe. USE FOR: General account stats by period, channel breakdown, high-level metrics (ROI, spending, leads, opportunities), custom date ranges. NOT FOR: Campaign-level info (use experiment_performance_stats), specific experiments (use get_experiments). CHANNELS: FACEBOOK, LINKEDIN, GOOGLE ADS, ALL TIMEFRAME LOGIC: - 'quarter'/'Q1-Q4' → timeframe='QUARTER' - 'week'/'weekly' → timeframe='WEEK' - ≤3 months → timeframe='MONTH' - >3 months → timeframe='QUARTER' - Default: timeframe='MONTH' CUSTOM DATE RANGE: Provide ONLY startDate + endDate (NO timeframe). Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ) NO DELIVERY: a period with no delivery comes back with empty totals and an empty channelBreakDown (the platform sends null for both); read that as zeros for every channel, not as missing data. METRICS: impressions, clicks, spent, leads, mqls | opens, sends, actionClicks (CONVO/MESSAGE ads) | triggeredOpps, triggeredOppsAmount, influencedOpps, influencedOppsAmount | triggeredClosedWonOpps, triggeredClosedWonOppsAmount | roiInfluencedOpp, roiTriggeredOpp | cpc, cpl, cpm, ctr, conversionRate | costPerOpen, costPerSend (CONVO/MESSAGE ads) | customFields array CONVO/MESSAGE AD CAVEAT: opens, sends, actionClicks (and their per-cost derivatives) are the success metrics for CONVO and MESSAGE (LinkedIn message) ad types. clicks/ctr/cpc are typically 0 for these ads — do not treat that as "no performance". If account-level data shows high spend with 0 clicks, drill into experiment_performance_stats or get_ad_details to confirm ad type before drawing conclusions.
    ConnectorAPI key
  • Workspace-wide performance for a date window: views, likes, comments, shares, followers, posts published, average views per post and engagement rate, each as { value, previousValue, deltaPercent } against the window of the same length just before it. Use this for "how did we do this month" questions and for follower counts. Metrics are summed over the selected platforms; partialMetrics names metrics some selected platform cannot report, and a metric no platform reports is null. Analytics cover the last 180 days and refresh every few hours (lastSyncedAt says when); if the user just published, call trigger_analytics_sync first. Use get_analytics_timeseries for a trend, get_platform_breakdown to compare platforms, and list_post_analytics for individual posts.
    ConnectorOAuth

Matching MCP Servers

Matching MCP Connectors

  • ReportingOracle — 16 regulatory reporting tools: BaFin, ESMA, FINREP, COREP, ICAAP, ILAAP.

  • Rick and Morty MCP — wraps the Rick and Morty API (free, no auth)

  • Per-post metrics for posts published inside the window, sorted by a metric or by publish date, paginated. Use it for "top posts", "which post got the most comments" and "how did post X do". Covers posts published through AdaptlyPost and posts discovered on the connected accounts; discovered posts have postId and postPlatformId set to null, while AdaptlyPost posts carry the postId used by get_post. Returns { posts, total, page, limit, hasMore }; each post has platform, publishedAt, title, thumbnailUrl, permalink, accountName and metrics { views, likes, comments, shares, saves, clicks, impressions, reach, engagementRate }, with null for metrics the platform does not report. Sort by VIEWS with a small limit for a top list; PUBLISHED_AT (default) for a chronological review. Not for publishing status: use list_post_results for that.
    ConnectorOAuth
  • Prepare a same-account 1:1 campaign/ad-set tree clone, keeping each ad's creative. Pass ad_account_id and exactly one source_campaign_id or source_adset_id; copies=1-10. paused is default; inherit may resume spend. Use copy_ad_quick_copy to expand selected ads. Review exclusions, then launch_confirm after approval
    ConnectorOAuth
  • Generate the ad creative for an idea: tagline, primary and secondary ad text, an image prompt, and sign-up page copy. Requires a complete brief — call idealaunch_draft_brief and idealaunch_update_idea_brief first if it is not. Args: - ideaId (string) - save (boolean): when true, writes the generated copy onto the idea. Defaults to false so the founder can review first. Returns: { ideaId, saved, assets: { tagline, adPrimaryText, adSecondaryText, imagePrompt, signupLearnMoreMarkdown, signupThemePreset }, note }. It does NOT write the sign-up page headline, description or CTA — set those with idealaunch_update_idea_brief, since they are what the conversion-destination check requires. Consumes one of the idea's AI generation turns. Costs no Ad Run credit.
    ConnectorOAuth
  • Granular performance metrics for ads, audiences, creatives, offers, target groups, keywords. IMPORTANT: Always specify endpoint parameter. Always use ISO 8601 for dates. USE FOR: Best performing ads/audiences/creatives/offers/target groups, ingredient comparisons, ad type analysis (IMAGE, VIDEO, CAROUSEL), lead gen forms vs landing pages, pipeline by ingredient, creative previews, keyword performance. NOT FOR: Account-level stats, experiment-level analysis without ingredient focus. ENDPOINT LOGIC: - 'target group' → customAudience/group - 'audience' → customAudience - 'offer'/'lead gen'/'landing page' → offer - 'creative' → creative - 'keyword' → keywords - 'ad'/'ads' or default → ads AD TYPES: IMAGE, VIDEO, CAROUSEL, DOCUMENT, CONVO, SPOTLIGHT, SEARCH, MESSAGE - The `adFormat` field on each response row identifies the ad type. METRICS: spend, impressions, clicks, leads, mqls | opens, sends, actionClicks, costPerOpen, costPerSend (CONVO/MESSAGE ads) | cpl, cpc, cpm, ctr, conversionRate, formConversionRate, mqlRate | totalOpps, totalTriggered, oppsAmount, triggeredAmount | cpMql, cpOppInfluenced, cpOppTriggered | channel, goal, adFormat, audienceSize, statusLabel | previewUrl CONVO/MESSAGE AD CAVEAT: when adFormat is CONVO or MESSAGE (LinkedIn message ads), success is measured by opens, sends, and actionClicks (and costPerOpen / costPerSend), NOT clicks/ctr/cpc. Do not rank these ads by CTR or dismiss them when clicks=0. Use sort='actionClicks,desc' or sort='opens,desc' for conversational performance ranking. RULES: Field 'id' corresponds to endpoint queried. Exclude $0 CPL experiments from calculations.
    ConnectorAPI key
  • Archive (soft-delete) one or more ads on the Metadata platform. ARCHIVE IS HOW YOU DELETE AN AD. The platform has NO hard-delete endpoint for ads — archive is the soft-delete and the only way to remove an ad from the active library. When the user says "delete this ad", "remove this ad", "discard this ad", "trash this ad", or "get rid of this ad" → call archive_ad. Do NOT hallucinate a delete_ad or remove_ad tool; it does not exist. The archived ad is preserved on the platform (it still has its id, creative_json, and history) and can be restored with unarchive_ad. USE THIS TOOL WHEN: - User asks to delete, remove, discard, trash, drop, retire, or archive one or more ads. - User wants to clean up draft ads they no longer need. - User asks "make this ad go away" or similar. HOW TO GET THE id(s): - search_ads_by_names(ad_names=[...]) → returns active ad ids. - get_ad_details(ids=...) → confirms an ad exists if the id is already known (works for active ads). ALSO KNOWN AS: archive ad, delete ad, remove ad, discard ad, trash ad, drop ad, retire ad, soft-delete ad, get rid of ad. KEYWORDS: archive, delete, remove, discard, trash, drop, retire, soft-delete, hide, get rid of, clean up, ad cleanup. PARAMETERS: - ids: Array of integer ad ids (at least one). Bulk-friendly — pass several ids to archive multiple ads in a single call. RETURNS: { "success": true, "archived_ids": [123, 456], "count": 2 } To bring an archived ad back, call unarchive_ad with the same id(s).
    Connector
    Destructive
    API key
  • Create a new or update an existing LinkedIn Document Ad on the Metadata platform. A LinkedIn Document Ad promotes a multi-page document (a PDF — e.g. a whitepaper, ebook, report, or guide) natively in the LinkedIn feed. Members preview the first few pages inline, then unlock the full document (typically gated behind a lead form). It is LinkedIn-only. IMPORTANT: This tool is ONLY for LinkedIn Document Ads (channelType=LINKEDIN, adType=DOCUMENT). For IMAGE/GIF ads use create_update_image_ad; for VIDEO ads use create_update_video_ad; for CONVO use create_update_convo_ad; for Sponsored Messaging use create_update_linkedin_message_ad. BEHAVIOR: - If `id` is NOT provided -> creates a new Document Ad. - If `id` IS provided -> updates the existing Document Ad with that ID. CREATIVE WORKFLOW (MUST DO BEFORE CALLING): 1. The document must already exist in the creative library as a DOCUMENT asset. Find it with `search_library_creatives_by_name(contentTypes="DOCUMENT")`, or confirm a specific id with `fetch_creative_details`. 2. Pass that asset's integer id as `libraryId`. It MUST be a DOCUMENT-type creative — an image or video id will be rejected by LinkedIn. Unlike IMAGE/VIDEO ads there is NO display URL: the gated document is the destination, so no link field is accepted. CHARACTER LIMITS (mirror the LinkedIn ad limits the platform UI enforces): - name <= 50 chars (ad name in the library) - headline <= 200 chars (the headline shown with the document) - text <= 3000 chars (the introductory text) INPUT PARAMETERS: - id (optional): Existing Document Ad ID. Provide to UPDATE; omit to CREATE. - name (required, <= 50): Ad name in the library. - libraryId (required): Integer id of the DOCUMENT creative in the library (contentType=DOCUMENT). NOT an image/video id. - headline (required, <= 200): Headline shown with the document. - text (required, <= 3000): Introductory text shown with the document. - ctaType (optional, default UNLOCK_FULL_DOCUMENT): the call-to-action. UNLOCK_FULL_DOCUMENT is the document-gate CTA. - maxPreviewPages (optional, default 1): how many pages of the document are previewable before the unlock gate. Positive integer. - completionStatus (optional, default DRAFT): "DRAFT" or "COMPLETED". Use COMPLETED only when every required field is final. WHEN TO USE: - User asks to "create a LinkedIn Document Ad" / "whitepaper ad" / "promote a PDF / ebook / report on LinkedIn". - User wants to update an existing Document Ad. WHEN NOT TO USE: - Feed image / GIF ad -> create_update_image_ad - Feed video ad -> create_update_video_ad - Branching conversation flow -> create_update_convo_ad - One-shot Sponsored Message -> create_update_linkedin_message_ad EXAMPLE USAGE (Create): create_update_document_ad( name="Q3_Whitepaper_LI_Document", libraryId=15791, headline="The 2026 State of B2B Marketing", text="Download our latest research on pipeline attribution.", maxPreviewPages=2, ) EXAMPLE USAGE (Update): create_update_document_ad( id=29144, name="Q3_Whitepaper_LI_Document_v2", libraryId=15791, headline="The 2026 State of B2B Marketing (Updated)", text="Now with fresh benchmarks.", ) COMMON MISTAKES: - Passing an IMAGE/VIDEO libraryId — the asset must be a DOCUMENT (use search_library_creatives_by_name(contentTypes="DOCUMENT")). - Passing a display / landing URL — Document Ads have no link field. - Using this tool for a non-LinkedIn channel — Document Ads are LinkedIn-only.
    Connector
    Destructive
    API key
  • Generate an EDITABLE, layered brand creative: a clean AI background scene (no baked text) plus AI-placed, editable text/CTA/logo layers. Returns a structured layout document (JSON), NOT a flat image — the UI renders it in an editor the user can rearrange before saving. USE FOR: - The DEFAULT for a standalone creative the user will review, refine, or use — "make me a creative", "design an ad", "give me options", "a creative I can tweak/edit". - Any request where the user should be able to move/retype the headline, restyle the CTA, swap the logo, add layers, or regenerate the background before finalizing. DIFFERENT FROM generate_brand_creative: PREFER THIS for standalone creative requests. generate_brand_creative bakes headline + CTA into the pixels and returns one finished PNG; use that flat tool only when building an ad / feeding a campaign inline (the flat image flows straight into an ad, with no human edit-and-save step) or when a finished flat image is explicitly requested. COPY DISCIPLINE: fewer layers = a cleaner layout the user can actually edit. Default to headline + cta (add subheadline only when it genuinely earns its place); pass body / disclaimer ONLY when the user explicitly asked for that copy. COPY LIMITS (image copy is shorter than ad text): headline at most 45 characters and 8 words on a 1:1, 4:5 or 9:16 canvas (55 characters and 10 words on 16:9); cta at most 3 words and 18 characters; subheadline at most 90 characters. Copy over a limit is rejected with the limit named: shorten it and call again rather than splitting it across layers. RETURNS: a layered document — canvas dimensions, background image URL, brand colors/logo, and an ordered list of layers (headline, subheadline, body, cta, disclaimer, logo) with normalized positions and styling.
    ConnectorAPI key
  • Prepare one TikTok create operation in new, append-campaign, or append-adgroup mode. Returns a confirm_token and a human-readable summary; **does NOT publish until campaigns_quick_create_confirm is called with the token**. REQUIRED (always): advertiser_id (call assets_list_ad_accounts to discover), a saved template_id or exact template_name, plus exactly one creative source: tenant-owned creative.creative_id from creatives_list with readiness.create_eligible=true, ordered local creative.image_creative_ids for one carousel, or creative.{video_id | image_ids | tiktok_item_id}. A local creative_id is synced to the exact advertiser only after explicit confirmation. For Spark, pass the complete identity_id, identity_type, tiktok_item_id, and spark_receipt row from spark_ads_list_posts unchanged as creative; the server moves the identity fields into TikTok's native ad parameters and rejects any conflicting duplicate values. Set ad_params.ad_format to one of that row's supported_ad_formats values; the signed receipt rejects a video/carousel mismatch before approval. TEMPLATE SETTINGS: read templates_get.effective_creation_defaults and let the server fill saved campaign/ad-group/ad settings. MCP new and append modes require a saved template; without a selector, preparation returns needs_input/template_required. The resolved campaign_params.objective_type (APP_PROMOTION / WEB_CONVERSIONS / VIDEO_VIEWS / LEAD_GENERATION), adgroup_params.{optimization_goal, billing_event, bid_type}, ad_params.ad_format (SINGLE_VIDEO / SINGLE_IMAGE / CAROUSEL_ADS) must form a supported recipe. WEB_CONVERSIONS also requires adgroup_params.pixel_id; APP_PROMOTION requires adgroup_params.app_id from assets_list_apps. APP RECIPES (Smart+): one app_id per campaign — dual Android+iOS means two prepares. iOS APP_IOS defaults campaign_type=IOS14_CAMPAIGN, campaign BUDGET_MODE_INFINITE (ABO), adgroup BUDGET_MODE_DYNAMIC_DAILY_BUDGET 50. Android APP_ANDROID defaults campaign_type=REGULAR_CAMPAIGN, campaign BUDGET_MODE_DYNAMIC_DAILY_BUDGET 50 (CBO), adgroup BUDGET_MODE_INFINITE. Both use placement AUTOMATIC (TikTok+Pangle+GAB), optimization_goal=IN_APP_EVENT, and deep_bid_type=AEO when optimization_event is set (SUBSCRIBE is the live reference event). Pass app_id and a create_eligible local creative. When the advertiser has exactly one BC_AUTH_TT identity (TikTok's FB-page analog), the server fills identity_id / identity_type / identity_authorized_bc_id. Do not rewrite IOS14_CAMPAIGN to REGULAR_CAMPAIGN. INSTALL_NOW is the default CTA when neither call_to_action nor call_to_action_id is set. Local READY_LOCAL images/videos from creatives_list with readiness.create_eligible=true are valid App ad sources via creative.creative_id — do not require a TikTok Material Center image_id first. A web landing_page_url is stripped on APP_PROMOTION unless a deeplink is also present. Regular ads that can deliver on TikTok also require ad_params.call_to_action or ad_params.call_to_action_id; for Spark Pull, LEARN_MORE is the documented minimum CTA example. REGULAR CAROUSEL: CAROUSEL_ADS is compatible only with TRAFFIC, WEB_CONVERSIONS, APP_PROMOTION, LEAD_GENERATION, PRODUCT_SALES, CATALOG_SALES, or REACH; correct the selected objective or ad_format explicitly, never auto-rewrite the objective. REGULAR LOCAL MEDIA: exact advertiser-linked CUSTOMIZED_USER is required for local video/image. AUTH_CODE is Spark-only on regular create: use an eligible Spark post and pass its signed receipt unchanged when available; a legacy receipt-less item incurs one bounded live provider verification before approval. TT_USER and BC_AUTH_TT are not regular-local choices and may be used only on a server-verified compatible Smart+ route. REGULAR CAMPAIGN BUDGET: new regular campaigns default a missing campaign_params.budget_mode to BUDGET_MODE_INFINITE (non-CBO / ABO). Bounded DAY, DYNAMIC_DAILY_BUDGET, or TOTAL modes require a positive campaign budget, and dynamic daily mode requires budget_optimize_on=true (CBO). Meta-portable aliases campaign_params.budget_level=CBO|ABO|campaign|adgroup are accepted and rewritten to those native fields. Append modes reuse their existing campaign and do not apply this contract. REGULAR AD-GROUP BUDGET/SCHEDULE: new and append-campaign modes require adgroup_params.budget_mode (BUDGET_MODE_DAY, BUDGET_MODE_DYNAMIC_DAILY_BUDGET, or BUDGET_MODE_TOTAL) plus a positive budget. Daily modes default a missing schedule to SCHEDULE_FROM_NOW; stale template start/end values are removed and the UTC start is stamped only at write time. BUDGET_MODE_TOTAL requires SCHEDULE_START_END with both UTC timestamps. Smart+ and append-adgroup do not use this new-ad-group contract. WITH template_id or template_name (Meta-portable): pass just advertiser_id + template_name (or template_id) + creative — propose pulls campaign_params / adgroup_params / ad_params from the template (caller-set keys win), derives campaign_name/adgroup_name from template.campaign_naming / template.adgroup_naming, stamps ad_name as `{adgroup_name}-{utc}`, and reads is_smart_plus from template.campaign_params.is_smart_performance. The selected media determines the compatible image/video format; do not force SINGLE_VIDEO onto a local image from a video template. Smart+ APP_PROMOTION defaults call_to_action to INSTALL_NOW. Meta copy aliases title/headline→display_name, body/text/message→ad_text, and cta→call_to_action are accepted. App display_name defaults from the linked app name. TEMPLATE/ROOT COMPATIBILITY: prefer the compact template selector plus creative shape above, with overrides in campaign_params / adgroup_params / ad_params and execution. adset_params is accepted as an adgroup_params alias; both maps are preserved for conflict validation. A templates_get row spread may supply id, name, and campaign_naming as selector echoes; other read-only row metadata is ignored. Supported root budget, counts, statuses, bid, schedule, Smart+ switches, copy, and identity fields are passed to the same normalizer as execution/native fields. Conflicting duplicates must be corrected before confirmation. AUTO-FILLED FROM USER ASSETS: identity_authorized_bc_id (when identity_type=BC_AUTH_TT), promotion_type/app_type/package/app_download_url (for APP_PROMOTION when app_id is set), placements default to [PLACEMENT_TIKTOK] for PLACEMENT_TYPE_NORMAL, top-level targeting fields (location_ids, operating_systems, age_groups, …) fold into adgroup_params.targeting. INITIAL STATUS: omit entity status fields such as campaign_params.status, adgroup_params.status, and ad_params.status; `status` is unsupported. Where a native field is needed for payload compatibility, use operation_status. Campaign, ad group, and ad statuses default to DISABLE; explicit ACTIVE/ENABLE is preserved in the approved plan. Smart+ adgroup/create does not accept operation_status. When a new Smart+ ad group is requested DISABLE, a separate durable post-create disable step must be acknowledged before ad creation. ENABLE requires no disable step. SMART+ IMAGE MUSIC: SINGLE_IMAGE and CAROUSEL_ADS require a music_id because TikTok's image creative wire requires music. When music_info is omitted (or music_id is auto/random), the server selects one advertiser-available track from assets_list_music and revalidates that exact ID on the recorded create route. An explicit music_id still wins. Append-adgroup may inherit one unambiguous parent track. Preserve an explicit template track, including across advertisers, and verify that exact ID for the target; unavailable music requires another explicit selection, never silent replacement. If no usable track is available, use a video creative. LOCAL IMAGE GROUPS: creative.image_creative_ids is an ordered list of 2..35 JPEG/PNG images for one native CAROUSEL_ADS creative, and the same field is accepted inside ad_params.creative_list[].creative_info for one carousel variant. Use only create_eligible image rows from the tenant library. SINGLE_IMAGE is a separate format; one image is not a native multi-card carousel. For TikTok Android App carousel ads, use CAROUSEL_ADS with music and the ordered image group. Do not split cards into separate creative_list entries or pass local IDs as provider image_ids. Inspect the prepared plan's final format and ordered members before confirmation. If the receipt reports creative_image_not_ready, wait the returned retry_after_seconds (10s), then prepare the same local IDs for a new approval; existing acknowledged image uploads are reused. creative_image_not_usable requires different eligible material. An uncertain upload must be reconciled, never automatically reuploaded or replayed. META EXECUTION BLOCK: pass execution like Meta QuickCreate — execution.budget.level=campaign|adset (CBO/ABO), execution.budget.type=daily|lifetime, execution.budget.amount, execution.is_smart_plus / execution.advantage_plus / execution.is_smart_performance for Smart+, execution.statuses.{campaign,adset,ad} (ACTIVE/PAUSED -> ENABLE/DISABLE), execution.bid.{strategy,cap}, execution.start_time / execution.end_time, execution.start_mode (immediate or tomorrow = advertiser TZ next day 00:05 UTC wire), and legacy flat execution.budget_level / execution.budget_amount. execution.campaign_count and execution.adset_count expand into a bounded serial batch (product <= 20, append_mode=new only). creative_distribution=all_per_adset (default) keeps Smart+ multi-creative on one ad via ad_params.creative_list; one_per_adset expands Smart+ to one ad group per creative (not Meta ad objects). OPTIONAL: creative_distribution (all_per_adset|one_per_adset), is_smart_plus (bool, default derived from template), execution (object), call_to_action_id (str — portfolio id, alternative to ad_params.call_to_action enum), campaign_params.budget_level (CBO/ABO). APPEND MODES (TikTok-native): append_mode="append-campaign" with target_campaign_id creates one ad group + one ad under that exact campaign; omit campaign_params. append_mode="append-adgroup" with target_adgroup_id creates one ad under that exact ad group; omit campaign_params and adgroup_params. Existing APP_PROMOTION ad groups keep their app_id / promotion_type; pass only the new ad plus a create_eligible local creative_id, ordered image_creative_ids, or provider image_ids. The server verifies advertiser ownership, exact authorization route, parent status, hierarchy, and Smart+ compatibility before prepare and again before mutation. Do not use Meta append-adset naming, do not guess by name, and never supply both target IDs. If required fields are missing, returns status="needs_input" with bounded rejected_paths and next_action — fix and re-call. Confirm tokens expire after 10 minutes. Successful proposals include a summary with `recipe` and `launch_readiness`, matching the dashboard's core readiness model. Smart+ is intentionally limited to locally verified recipes: APP_PROMOTION, WEB_CONVERSIONS, PRODUCT_SALES, and LEAD_GENERATION. EXAMPLE (template path, Meta-portable name): campaigns_quick_create({"advertiser_id": "7563...", "template_name": "iOS14 AEO", "creative": {"creative_id": "<owned-ready-creative-id>"}})
    ConnectorOAuth
  • Prepare a same-advertiser TikTok campaign or native ad-group structural clone from live TikTok structure. Use only when the user explicitly asks to clone an existing campaign/ad group. For new launches from tenant uploads, call creatives_list then campaigns_quick_create with creative.creative_id — not this tool. Provide exactly one source_campaign_id or source_adgroup_id and copies 1..5. Every source ad keeps its own TikTok provider creative; live media is often not API-reusable. No cross-advertiser transfer. One approval and one serialized task journal. Optional execution.start_time/end_time replaces the source launch schedule; old bounded starts need an explicit replacement, and source end times are preserved unless explicitly replaced.
    ConnectorOAuth
  • Get Google Ads performance insights for an account, at campaign, ad-group, or keyword level (cache-first with auto-refresh from Google). Returns an account summary with previous-period comparison, a sortable per-entity table, and an optional daily timeseries. Metrics on both the summary and every row: cost, impressions, clicks, conversions, conversions_value + derived roas/ctr/cpc/cpm/cost_per_conversion/cvr; all_conversions, all_conversions_value, cost_per_all_conversion, view_through_conversions, cross_device_conversions (all_* counts EVERY conversion action, `conversions` counts only the ones included in bidding); engagements, engagement_rate, interactions, interaction_rate; video_views (TrueView/YouTube), video_view_rate, avg_cpv, video_p25/p50/p75/p100_rate; youtube_comments, youtube_likes, youtube_shares (v25 social engagement on Shorts ads on YouTube — 0 outside YouTube/Shorts delivery); and the competitive set search_impression_share, search_lost_is_budget, search_lost_is_rank, top_impression_pct, abs_top_impression_pct. The competitive metrics are Search-network only and read 0 for Display/PMax/Video delivery. search_lost_is_budget is CAMPAIGN LEVEL ONLY (the Google API does not report it for ad groups or keywords) so the key is ABSENT at the other levels rather than 0; at campaign level impression share plus the two lost shares add up to 100%. quality_score (1-10, null when Google reports none) appears only at keyword level. When Google capped most days in range, meta.share_metrics_note is set and rows carry search_share_is_approximate: report those three share figures as estimates. ad_account_id is the bare 10-digit customer ID from adsap_google_list_ad_accounts. Keyword-level row ids are "<ad_group_id>:<criterion_id>" — pass them as-is to adsap_google_set_entity_status / adsap_google_update_entity (entity_type keyword). Only entities with impressions in range appear (PMax has no ad groups/keywords by design). Note: Google reports plain Clicks/CTR/CPC (no Meta-style link-click split). For Meta insights use adsap_get_insights.
    ConnectorAPI key
  • Fetch the full record for a single creator by ID or exact platform username. Use this when you already have either: - a canonical creator UUID returned by `search_creators`, `semantic_search_creators`, `autocomplete_creators`, or `find_lookalike_creators`; or - an exact platform+username pair such as platform "instagram" and username "niickjackson". Pass `include: ['profiles']` to also receive the creator's social profile summaries when using a creator UUID. For platform+username inputs, this tool resolves through the profile endpoint and returns the profile record plus the underlying creator record, so you already get the matched profile context. Examples: - User: "Get creator 123e4567-e89b-12d3-a456-426614174000" -> call with id. - User: "Get @niickjackson on Instagram" -> call with platform "instagram" and username "niickjackson", or use `get_profile` if profile metrics are the main need. - User: "Tell me about @niickjackson and include his profiles" -> use platform "instagram" and username "niickjackson"; then use `get_profile`/`get_posts` for platform-specific metrics and content if needed. Use `lookup_profiles` for batch exact profile lookups.
    ConnectorNo auth
  • Fetch the full record for a single creator by ID or exact platform username. Use this when you already have either: - a canonical creator UUID returned by `search_creators`, `semantic_search_creators`, `autocomplete_creators`, or `find_lookalike_creators`; or - an exact platform+username pair such as platform "instagram" and username "niickjackson". Pass `include: ['profiles']` to also receive the creator's social profile summaries when using a creator UUID. For platform+username inputs, this tool resolves through the profile endpoint and returns the profile record plus the underlying creator record, so you already get the matched profile context. Examples: - User: "Get creator 123e4567-e89b-12d3-a456-426614174000" -> call with id. - User: "Get @niickjackson on Instagram" -> call with platform "instagram" and username "niickjackson", or use `get_profile` if profile metrics are the main need. - User: "Tell me about @niickjackson and include his profiles" -> use platform "instagram" and username "niickjackson"; then use `get_profile`/`get_posts` for platform-specific metrics and content if needed. Use `lookup_profiles` for batch exact profile lookups.
    ConnectorNo auth
  • Score a creative prompt, script, or ad concept for hook strength, benefit clarity, product signal, call-to-action, channel fit, audience fit, and brand fit. This is a transparent heuristic, not a proprietary prediction model. Local brand profiles are not available on the hosted (remote) endpoint (per-user state is a later phase). Omit 'brand_profile_id' to score the pasted creative statelessly.
    ConnectorNo auth
  • Map LinkedIn Ad Library links (linkedin.com/ad-library/detail/<id>), sponsoredCreative URNs or bare LinkedIn creative ids to the ads in this account's Metadata library, so an ad the user points at by its LinkedIn link can be REUSED in a new campaign instead of rebuilt. WHAT IT CAN AND CANNOT RESOLVE (repeat this to the user when a link is not found): - It resolves ONLY ads that were launched THROUGH METADATA. Every ad Metadata publishes to LinkedIn is recorded with the LinkedIn creative id LinkedIn gave it, and that id is exactly what the Ad Library link carries. Those come back with the library ad (id, name, type) plus the experiment and campaign that ran them, ready to attach by name. - An ad launched natively in LinkedIn Campaign Manager (a sponsored personal post, a Thought Leader ad, anything built outside Metadata) is NOT in the library and CANNOT be imported from the link, by this tool or any other. The only way to run it here is to rebuild it from its source files (image, video, PDF) with the ad tools. - LinkedIn only. Meta or Google ad library links are refused per item. HOW IT SEARCHES: the platform has no lookup by LinkedIn creative id, so this scans the account's LinkedIn ads newest first (100 per page, `max_pages` pages, default 20, so the newest 2,000 ads) and stops as soon as every id is found. A miss with `reached_end: false` means the ad may simply be older than the scan: pass `campaign_ids` to narrow the scan to the campaigns that ran it, or raise `max_pages`. A miss with `reached_end: true` means the account never launched that ad through Metadata. PARAMETERS: - links: Ad Library URLs, `urn:li:sponsoredCreative:<id>` URNs or numeric LinkedIn creative ids (1 to 20 per call). - campaign_ids: optional wizard campaign ids that restrict the scan. - max_pages: optional, 1 to 50, default 20. RETURNS: {success, found, not_found, scanned_ads, scanned_pages, reached_end, results: [{input, linkedin_creative_id, found: true, library_ad: {id, name, type, channel, status, image_url}, experiment: {id, name, goal}, campaign: {id, name, status}, stats: {spend, impressions, clicks, leads}, destination_url, reuse} | {input, linkedin_creative_id, found: false, reason}]} NEXT STEPS: attach a found ad by its library NAME through create_campaign / add_and_edit_campaign_elements (`ads.list`), or read it with get_ad_details(ids=<library_ad.id>). Never re-upload a found ad's creative: that creates a duplicate library entry.
    ConnectorAPI key
  • Upload images directly to Metadata platform library to create image creatives. Downloads images from provided URLs and uploads them to the platform. REQUIRED STEP IN AD CREATION WORKFLOW: This tool MUST be called between generate_brand_creative and create_update_image_ad. **WORKFLOW INTEGRATION:** This tool is part of the ad creation workflow and should be used: 1. BEFORE creating ads with create_update_image_ad (which requires imageLibraryId/creativeID) 2. IN COMBINATION with generate_brand_creative to create AI-generated images first, then upload them 3. When you need to upload existing images from external sources **COMMON WORKFLOWS:** - Upload existing images → Get imageLibraryId → Use in create_update_image_ad - Generate image with generate_brand_creative → Download generated image → Upload with this tool → Use in create_update_image_ad - Batch upload multiple creative assets for campaign preparation **IMPORTANT:** The returned image ID (imageLibraryId/creativeID) is REQUIRED when creating ads. Every ad needs a creative asset, so you must upload images first before calling create_update_image_ad. REQUIRED PARAMETERS: - images: Array of image URLs to upload IMAGE REQUIREMENTS: - URLs must be valid and publicly accessible - Supported formats: PNG, JPG, JPEG, GIF, WebP, and others - Images will be downloaded and then uploaded to platform - Filenames with spaces will have spaces replaced with underscores EXAMPLES: Single Image: upload_image([ "https://my-bucket.s3.amazonaws.com/images/sample-image.png" ]) Multiple Images: upload_image([ "https://my-bucket.s3.amazonaws.com/images/logo.png", "https://example-assets.s3.us-west-2.amazonaws.com/photos/banner.jpg", "https://content-bucket.s3.eu-west-1.amazonaws.com/uploads/hero image.webp" ]) RESPONSE FORMAT: Returns array of objects for each image: [ { "url": "https://original-url.com/image.png", "name": "image.png", "id": 12345, "success": true }, { "url": "https://failed-url.com/bad.png", "name": "bad.png", "id": null, "success": false, "error": "Download failed: Connection timeout" } ] ERROR HANDLING: - If one upload fails, others will continue - Each result includes success status - Failed uploads include error message - Successful uploads include platform image ID USE CASES: - Upload creative assets before creating ads - Import images from external sources - Batch upload multiple campaign images - Migrate images from other platforms
    ConnectorAPI key