← Windsor.aiCONTENT HISTORY
WHAT CHANGED
Update to Windsor.ai
Snapshot Nov 10, 2026 · 06:07 UTC · version 4.1.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Windsor.ai and check future changes in Following.
Up to 3 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Review marketing performance across every source connected to Windsor.ai: paid ads (Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Amazon Ads), organic social, GA4, Search Console, CRM, e-commerce and payments. Use for campaign reports, weekly or monthly reviews, period-over-period comparisons, cross-channel comparisons, best and worst campaigns, and ROAS, CPA, spend, conversions or revenue questions. Read-only: does not change anything.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 367
}
],
"name": "marketing-performance-review",
"skill_md_contents": "---\nname: marketing-performance-review\ndescription: \"Review marketing performance across every source connected to Windsor.ai: paid ads (Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Amazon Ads), organic social, GA4, Search Console, CRM, e-commerce and payments. Use for campaign reports, weekly or monthly reviews, period-over-period comparisons, cross-channel comparisons, best and worst campaigns, and ROAS, CPA, spend, conversions or revenue questions. Read-only: does not change anything.\"\n---\n\nExplicit instructions from the user take priority over this skill.\n\n# Windsor.ai insights\n\nRead live data from any connected source through Windsor.ai and turn it into a clear report, ranking, comparison, or trend. The Windsor.ai server is not scoped to one platform: every tool takes a `connector` slug (for example `google_ads`, `facebook` for Meta Ads, `googleanalytics4`, `shopify`, `stripe`), so discover the slug and the accounts before reading.\n\n## Resolve scope and time\n- Call get_connectors first. It lists connected accounts per connector with their options and supported actions. If the source is not connected, hand off to the get-started skill instead of guessing. If several accounts match, ask which one.\n- Read field ids from get_fields for the chosen connector, and get_options for date-filter columns and connector options. Never guess connector slugs, account ids, field ids, or option ids.\n- Use the date range the user gave. If none, use a sensible preset (last_30d, this_month, last_7d) and state which one you used. Append T to a preset to include today.\n\n## Choose the smallest useful read\n- Channel or source comparison -> one get_data call per connector with a small shared field set (date plus the metric asked for), then compare in the answer and say the numbers are platform-reported.\n- Best or worst item -> the entity field (campaign, post, page, product, customer) plus the ranking metric; name the metric used. If \"best\" or \"worst\" has no metric, ask which one.\n- Trend -> date plus the metric over the preset; report direction and magnitude.\n- Efficiency -> compute from the raw fields (cost per conversion = spend / conversions; ROAS = conversion value / spend; engagement rate = engagements / reach) and say when a denominator is zero.\n- Keep field sets small, request only the accounts you need, and check for truncated or paginated results before claiming complete coverage.\n\n## Accuracy guardrails\n- Money fields are in the account currency; state it. Most Google Ads money fields (spend, cost, budget_amount) arrive in the account currency. Fields ending in `_micros`, and a few others such as `recommended_budget_amount`, `keyword_average_cpc` and `top_of_page_bid_*`, are in micros (1,000,000 = 1.00); check the field description. Google Ads write amounts are in micros, except target ROAS, which is a ratio (4.0 = 400%).\n- Conversions can be fractional. Do not round them into integers silently.\n- Attribution windows and metric definitions differ per platform; do not present cross-platform numbers as like for like.\n- If a field the user wants is not in get_fields, say so rather than substituting a different metric.\n\n## Platform notes\n- Google Ads: some money fields are in micros (see above), so check the field description; search terms cannot be requested together with keyword fields, so read them in separate calls.\n- Meta Ads, Facebook Pages, Instagram: reach and other unique metrics are deduplicated over the period; use the week or month field for weekly or monthly totals instead of summing daily rows. Facebook Pages returns one broken-down metric per request.\n- GA4: conversions are key events; GA4 has ad cost only for linked Google Ads accounts and imported cost (`advertiser_ad_cost`), so join spend from the other ad connectors for their ROAS.\n- Conversions differ per platform: Microsoft Ads uses `conversions_qualified` (its `conversions` field is deprecated and returns 0); LinkedIn `conversions` counts post-view conversions only, so use `externalwebsiteconversions`, plus `oneclickleads` for Lead Gen forms; Meta has no plain `conversions` field, so pick the `actions_*` event that matches the campaign objective (for purchases, `actions_omni_purchase` with `action_values_omni_purchase`). Check get_fields before treating any campaign as zero-conversion.\n- Search Console: data lags about two to three days; position is an average (lower is better) and CTR is clicks / impressions.\n- CRM (HubSpot, Salesforce, Pipedrive, GoHighLevel): deal value is in the account currency; stage and close-date fields differ per CRM, so read them from get_fields.\n- E-commerce and finance: a store (Shopify, Amazon) and an accounting system (QuickBooks, Xero) count the same sales twice; report them separately and keep currencies apart.\n\n## Answering \"what can you do\"\nCall get_connectors with include_not_yet_connected=True and answer from it: which sources are connected, which are available to connect, and per connector which options and write actions exist. Do not list capabilities the tool result does not show.\n\n## Answer with evidence\nLead with the requested result, then state the source and account, the time window, and the numbers behind the conclusion. Keep internal ids and raw JSON out of the answer unless the user asks for them.\n\n## Hand-offs\n- Confirmed changes (pause, enable, budgets, bids, audiences, flows, listing updates) -> the campaign-management skill\n- Creating or publishing something new (confirmed) -> the campaign-launch skill\n- Connecting, reconnecting, adding an account, or asking what is connected -> the get-started skill\n- Recurring exports and syncs -> the scheduled-exports skill\nAfter a report that surfaces an underperformer, offer once to open the campaign-management skill for it. Never offer plans, upgrades, or pricing.\n\n## Recipe: Cross-channel performance review\n\nReview how the business did across all connected sources, compared with the previous period.\n\n### Instructions\n\n1. Call `get_connectors`. Group the connected accounts into paid ads, organic social, web analytics, CRM, and revenue (e-commerce, payments, accounting). Skip groups with nothing connected.\n2. Use the period the user gives, else the last 30 days, and compare it with the previous period of the same length.\n3. For each connector, read field ids with `get_fields` and call `get_data` for a small field set: ads (spend, clicks, conversions, conversion value), organic (reach, engagement, follower growth), analytics (sessions, users, conversions), CRM (new deals or opportunities, pipeline value, won value), revenue (orders or invoices and revenue).\n4. Report one section per group: the headline numbers, the change against the previous period in percent, and the top and bottom item (campaign, post, channel, deal stage or product). State currencies and never add up different ones.\n5. End with three findings that deserve action, each with the numbers behind it. Offer the wasted-spend-audit skill if ad efficiency dropped, but do not change anything from this review.\n\n## Recipe: Quick campaign report\n\nGenerate a quick campaign performance report from any connected data source.\n\n### Instructions\n\n1. Call `get_connectors` to list the user's connected platforms and accounts.\n2. Ask the user which connector and account to report on (or pick the most obvious one if there's only one).\n3. Call `get_fields` for the connector and pick the ids for campaign, date, spend, clicks, impressions, conversions and conversion value or revenue (names differ per connector), then call `get_data` with them and `date_preset: \"last_30d\"`.\n4. Format the results as a clean markdown table sorted by spend descending.\n5. Include a summary line with totals for spend, clicks, and conversions.\n\nIf a connector has no conversion value or revenue field, leave it out and say so.\n"
}SHA-256 of public snapshot: 537b74c2e112a49ecb89a9f315d1ccbb358f5d698f59d684a1bccce2e6136da2