← Supermetrics Marketing AgentCONTENT HISTORY
WHAT CHANGED
Update to Supermetrics Marketing Agent
Snapshot Oct 27, 2026 · 00:05 UTC · version 4.1.2
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Supermetrics Marketing Agent and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "B2B demand gen analysis from live ad, GA4 and CRM data (HubSpot, Salesforce, Pipedrive): lead-gen efficiency, pipeline and revenue by channel, MQL-to-SQL by source, ABM engagement, and email plus paid funnels. Use for pipeline contribution, lead quality and ABM questions.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 249
},
{
"relative_path": "assets/abm_engagement_report.md",
"size_in_bytes": 3165
},
{
"relative_path": "assets/icon-small.png",
"size_in_bytes": 2921
},
{
"relative_path": "assets/integrated_funnel_summary.md",
"size_in_bytes": 3986
},
{
"relative_path": "assets/lead_efficiency_summary.md",
"size_in_bytes": 3656
},
{
"relative_path": "assets/lead_quality_diagnostic.md",
"size_in_bytes": 3683
},
{
"relative_path": "assets/pipeline_attribution_report.md",
"size_in_bytes": 3424
},
{
"relative_path": "references/demand-gen-guide.md",
"size_in_bytes": 6535
},
{
"relative_path": "scripts/abm_engagement.py",
"size_in_bytes": 7006
},
{
"relative_path": "scripts/email_paid_funnel.py",
"size_in_bytes": 4636
},
{
"relative_path": "scripts/lead_efficiency.py",
"size_in_bytes": 4582
},
{
"relative_path": "scripts/mql_quality.py",
"size_in_bytes": 4506
},
{
"relative_path": "scripts/pipeline_attribution.py",
"size_in_bytes": 3419
}
],
"name": "b2b-pipeline-analysis",
"skill_md_contents": "---\nname: b2b-pipeline-analysis\ndescription: B2B demand gen analysis from live ad, GA4 and CRM data (HubSpot, Salesforce, Pipedrive): lead-gen efficiency, pipeline and revenue by channel, MQL-to-SQL by source, ABM engagement, and email plus paid funnels. Use for pipeline contribution, lead quality and ABM questions.\n---\n\n# B2b pipeline analysis\n\n## Workflows\n\n### Lead generation efficiency comparison\n**When to use:** the user is comparing efficiency of B2B advertising platforms for lead capture, typically LinkedIn vs Facebook. Output is usually a one-page summary for the demand gen team or a leadership recommendation.\n\n**Platforms typically involved:** LinkedIn Ads and Facebook Ads primarily. Sometimes Google Ads for B2B search.\n\n### Step 1 — Pull the data with campaign filter\n> Pull the last 60 days of campaign performance from LinkedIn Ads and Facebook Ads, filtered to campaigns containing the phrase [Lead Gen / LG_ / MQL_ / whatever the user's convention is].\n\nThe filter phrase is specific to the user's naming convention. Ask if unclear. The data needs to be at the ad / asset level, not just campaign level — different assets in the same campaign often perform very differently.\n\n### Step 2 — Compare CPL and lead conversion rate\nUse `scripts/lead_efficiency.py` (columns: `platform`, `spend`, `clicks`, `impressions`, `leads`). Outputs platform-level CPL, lead-to-click ratio, CTR, and a comparison summary. For LinkedIn Lead Gen Forms, the lead count is the `oneClickLeads` field.\n\n### Step 3 — Visualize the comparison\nThe question the chart needs to answer: **which platform is more efficient, and by how much?**\n\nA simple sorted bar chart of CPL by platform works as the primary visualization. If the user wants the multi-dimensional view, a small dashboard-style group (CPL, lead conversion rate, CTR, total leads) with the platforms side-by-side makes the trade-offs visible — sometimes the cheaper platform produces fewer leads, or the lower-CPL platform has worse lead quality. Name the trade-off explicitly when surfacing the visualization.\n\nIf the user has tagged the ad creatives, a secondary chart ranking individual ads by efficiency (across both platforms) surfaces the actual winners, which is often more useful than the platform-level average.\n\n### Step 4 — Identify what's working in the winners\n> Identify the top two best-performing ad creatives across both platforms based on conversion rate, and explain why their messaging is likely resonating with the target audience.\n\nThis is the qualitative step. Look at the winning ad copy and identify the actual angle — pain point, social proof, status, ROI claim. The output is a brief on what's resonating, which the user can take into the next round of creative.\n\nUse `assets/lead_efficiency_summary.md` to structure the final deliverable.\n\n### Step 5 — Output\nDefault delivery is markdown inline. If the user wants a Word doc, use the `docx` skill.\n\n### Common variations\n- **Add Google Ads search to the comparison** — search and social lead gen aren't directly comparable on raw CPL. Frame as \"intent-driven (search) vs interruption-driven (social)\" rather than head-to-head.\n- **Cost per MQL, not cost per lead** — needs CRM data. If a HubSpot or Salesforce connector is active, pull MQL counts by source. Without one, ask the user how they'll get the data.\n- **Compare to last quarter** — re-run for the prior 60-day window and overlay both periods on the chart.\n\n---\n\n### Pipeline contribution by channel\n**When to use:** the user is in B2B and wants to credit marketing channels with the pipeline they actually create — not just leads. This is the single most-requested demand gen analysis when a CRM connector is available.\n\n**Platforms typically involved:** ad platforms (LinkedIn Ads, Google Ads, Facebook Ads) + a CRM connected in Supermetrics (HubSpot, Salesforce, Pipedrive, Zoho CRM, Close CRM, Odoo CRM). Useful fields: HubSpot `deal_amount`, `deal_stage`, `original_source`; Salesforce `opportunity_amount`, `opportunity_stage_name`, `opportunity_lead_source`. Confirm exact names with `field_discovery`.\n\n### Step 1 — Pull spend and pipeline\n> Pull the last 90 days of ad spend by channel from [ad platforms]. Then pull opportunities created in the same period from [CRM], including opportunity amount, stage, and source/first-touch channel.\n\nConfirm with the user how their CRM attributes channels to opportunities — most common patterns:\n- **First-touch:** the channel that brought the contact in\n- **Last-touch:** the channel of the activity immediately before opportunity creation\n- **Multi-touch:** weighted across all touchpoints\n\nState the attribution method explicitly in the output.\n\n### Step 2 — Compute cost per opportunity and pipeline ROAS\nUse `scripts/pipeline_attribution.py --spend spend.csv --opps opportunities.csv` (optional `--stage-filter`). Outputs per channel:\n- Total spend\n- Number of opportunities attributed\n- Total pipeline value (sum of opportunity amounts)\n- Cost per opportunity (CPO)\n- Pipeline ROAS (pipeline value / spend)\n\n### Step 3 — Visualize the credit\nThe question the chart needs to answer: **which channels create the pipeline, and at what cost?**\n\nA useful primary visualization is a paired bar chart per channel: spend (one bar) and pipeline created (second bar, often on a secondary axis since the scales differ). Channels where the pipeline bar is much taller than spend are the leverage channels.\n\nA secondary view: stacked bar of pipeline value by channel, sorted by total. Surfaces which channels concentrate vs spread their pipeline contribution.\n\n### Step 4 — Frame caveats\nThis view has limitations that need to be surfaced:\n- It's not closed-won revenue, it's pipeline. Some pipeline will close; some won't.\n- The attribution method shapes the rankings. First-touch credits top-of-funnel channels; last-touch credits bottom-of-funnel channels.\n- Opportunities can sit in pipeline for months. The 90-day window captures opps created, not opps closed.\n\n### Step 5 — Build the report\nUse `assets/pipeline_attribution_report.md`. The audience is typically the VP of Sales or CRO; tone should be data-forward with explicit acknowledgment of attribution choices. For a recurring pipeline review, offer a live Studio dashboard (with `manage_dashboards`).\n\n### Common variations\n- **Closed-won, not pipeline** — re-run with `--stage-filter` set to the CRM's closed-won stage name. Smaller numbers, longer time lag, but more defensible. Best for quarterly reviews.\n- **Win rate by channel** — additional column: of opps from this channel, what % closed? Some channels generate lots of low-quality pipeline; this surfaces it.\n- **Deal size by channel** — average opportunity amount per channel. Often the highest-CPO channels generate the largest deals.\n\n---\n\n### MQL-to-SQL conversion rate by source\n**When to use:** the user needs lead quality measurement, not just lead volume. CPL is the cheap version of this question; MQL-to-SQL conversion rate is the real answer.\n\n**Platforms typically involved:** ad platforms + CRM (HubSpot, Salesforce). Marketing automation (Marketo via the Adobe Engage connector, Eloqua, HubSpot Marketing Email) if lead nurture is part of the journey.\n\n### Step 1 — Pull leads, MQLs, and SQLs by source\n> Pull the last 90 days of leads created from [CRM], grouped by lead source. For each lead, include whether they reached MQL status and SQL status, and the dates of each transition.\n\nIn HubSpot (`HSCON`), the lifecycle date properties (`Became a lead / marketing qualified lead / sales qualified lead date`) and `original_traffic_source` give this per contact; in Salesforce, use the Leads report with `lead_source`, `lead_status` and `lead_converted_date`. HubSpot also has aggregate counts and average days to MQL/SQL in `HS`.\n\nThe 90-day window matters — leads need time to progress through the funnel. Pulling last week's data won't show conversion rates because leads haven't had time to convert.\n\n### Step 2 — Compute conversion rates per source\nUse `scripts/mql_quality.py` (columns: `source`, `lead_created_date`, `mql_date`, `sql_date`, optional `spend` or `--spend-csv`). Outputs per source:\n- Total leads\n- MQL conversion rate (% of leads that became MQLs)\n- SQL conversion rate (% of MQLs that became SQLs)\n- Lead-to-SQL conversion rate (% of leads that became SQLs)\n- Time-to-MQL (median days)\n\n### Step 3 — Visualize quality vs volume\nThe question the chart needs to answer: **which sources produce high-quality leads, and which produce volume without quality?**\n\nA scatter plot works well here: x-axis = lead volume, y-axis = MQL conversion rate. Bubble size = total spend on the source. Sources in the top-right (high volume + high quality) are the keepers; bottom-right (high volume + low quality) are the spend-too-much candidates.\n\nA secondary view: funnel chart per source — leads → MQLs → SQLs. Visualizes where the drop-off happens per source.\n\n### Step 4 — Diagnose\nFor sources with low MQL conversion, the question is whether the issue is:\n- **Lead targeting** (the source brings in wrong-fit leads)\n- **Lead nurture** (the leads aren't getting touched, or the nurture doesn't resonate)\n- **MQL definition** (the bar is set too high)\n\nThe script doesn't diagnose this automatically — surface the question for the user to investigate.\n\n### Step 5 — Output\nUse `assets/lead_quality_diagnostic.md`. Audience: marketing operations or demand gen leadership.\n\n### Common variations\n- **Add deal-source connection** — for sources where SQLs convert, what's the average deal size? Quality has multiple dimensions.\n- **Cohort by month** — recent-cohort conversion rates may differ from older cohorts. Plot trend.\n- **Compare paid vs organic sources** — paid sources should have higher CPL but often have lower MQL rates because of intent quality.\n\n---\n\n### ABM campaign performance\n**When to use:** the user runs account-based marketing (ABM) and needs to measure coverage and engagement across a defined target account list.\n\n**Platforms typically involved:** LinkedIn Ads (the primary ABM ad platform) + CRM with target account list + GA4 or web analytics for engaged-session data.\n\n### Step 1 — Get the target account list\nAsk the user (multiple-choice if the client supports it): is the target account list maintained in the CRM (as an account property or list membership) or elsewhere? How many accounts are on it?\n\n### Step 2 — Pull engagement signals\nFor each target account, gather available engagement signals:\n- **From LinkedIn Ads:** impressions and clicks by `memberCompanyName` (company demographics; LinkedIn hides values below its privacy threshold, so small accounts may not appear)\n- **From the CRM:** activities logged against the target account, meetings booked, opportunities created\n- **Website visits by company:** GA4 doesn't identify companies. Use a reverse-IP tool's export (e.g. Clearbit, 6sense) or HubSpot's `HSCON` contact/company data if available\n\n### Step 3 — Compute account-level coverage and engagement\nUse `scripts/abm_engagement.py`. Outputs per account:\n- Coverage (have we reached them at all)\n- Engagement score (composite from impressions, clicks, site visits, activities)\n- Pipeline status (opportunity / no opportunity)\n- Last meaningful touchpoint\n\nAggregated:\n- % of target accounts reached\n- % of target accounts engaged\n- % of target accounts in active pipeline\n\n### Step 4 — Visualize the funnel\nThe question the chart needs to answer: **of our target accounts, how many are at each stage of engagement?**\n\nA funnel chart works: target list size → reached → engaged → opportunities → closed-won. Each tier showing the absolute count and the conversion rate.\n\nA secondary view: a list view (top 20 most-engaged target accounts that aren't yet in pipeline), since those are the highest-value follow-up targets for sales.\n\n### Step 5 — Build the report\nUse `assets/abm_engagement_report.md`. Audience: B2B marketing leader + sales counterparts running the ABM program together. ABM programs are reviewed every few weeks, so offer to publish the ad and CRM side as a live Studio dashboard (with `manage_dashboards`).\n\n### Common variations\n- **Tier the target accounts** — Tier 1 (top 50) vs Tier 2 (next 200) may need different KPIs. Higher tiers should show deeper engagement.\n- **Compare ABM-touched vs untouched** — for accounts on the target list, do those that received ABM touches close at higher rates than those that didn't?\n- **Persona reach within accounts** — coverage isn't just account-level; it's persona-level within accounts. The CMO and the VP of Engineering need different messaging. Pull LinkedIn engagement by `memberSeniority` or `memberJobFunction` (aggregate, not per account).\n\n---\n\n### Email + ads integrated funnel\n**When to use:** the user runs both paid acquisition and email nurture and wants to see how they interact — does email nurture make paid clicks convert better? Does paid acquisition feed the email list usefully?\n\n**Platforms typically involved:** ad platforms + email marketing platforms (HubSpot Marketing Email, Adobe Engage/Marketo, Mailchimp, Klaviyo, Brevo, Campaign Monitor, ActiveCampaign, Omnisend) + CRM for the conversion data.\n\n### Step 1 — Pull the email side\n> Pull the last 90 days of email campaign performance from [email platform]: campaigns sent, opens, clicks, conversions, and revenue attributed.\n\nAlso pull list growth (e.g. Mailchimp's ListGrowthHistory report). Subscriber source by channel usually comes from the CRM (HubSpot `original_traffic_source`) or GA4 sign-up events by source, not from the email platform.\n\n### Step 2 — Pull the paid side\n> Pull the last 90 days of paid acquisition data, focusing on conversions that include both \"purchase\" / \"lead\" type and \"newsletter signup\" / \"email subscription\" type.\n\n### Step 3 — Join the views\nUse `scripts/email_paid_funnel.py` (columns: `channel`, `clicks`, `spend`, `subscribed`, `converted_direct`, `converted_via_email`, `still_nurturing`). The per-channel subscriber and conversion counts usually have to be assembled from CRM or GA4 data first. The script:\n- Computes paid-to-email-subscriber rate (of paid clicks, how many turned into email subscribers)\n- Computes email-to-conversion rate (of nurtured subscribers, how many converted within the period)\n- Identifies the channels that subscribe-then-convert at high rates (efficient acquisition through nurture) vs convert directly (efficient acquisition without nurture)\n\n### Step 4 — Visualize the interaction\nThe question the chart needs to answer: **does our email nurture amplify paid acquisition, or is it a separate channel?**\n\nA Sankey-style flow diagram is ideal here — paid channels on the left, \"Subscribed\", \"Direct converted\", or \"Lost\" in the middle, \"Converted via email\", \"Converted directly\", \"Still nurturing\" on the right. The flow widths show volume.\n\nIf a Sankey is too complex, a stacked bar per paid channel showing the split (% direct converted, % subscribed and later converted, % subscribed and still nurturing, % lost) works as a simpler alternative.\n\n### Step 5 — Build the narrative\nUse `assets/integrated_funnel_summary.md`. The interesting finding is usually one of:\n- \"Email amplifies acquisition — paid channels with the highest subscribe rate also have the highest eventual conversion rate via nurture\"\n- \"Email and paid are separate channels — subscribers convert at similar rates regardless of paid source\"\n- \"Paid acquisition is bypassing email — high direct-conversion rates mean email is mostly serving repeat business\"\n\n### Common variations\n- **Per-segment email performance** — if the email platform supports segmentation, surface which segments (e.g. newsletter subscribers vs free-trial users) convert at higher rates.\n- **First purchase vs repeat** — for ecommerce, separate first-purchase email influence from repeat-purchase email influence. Often very different patterns.\n- **Welcome series performance specifically** — the welcome series is the highest-leverage email touchpoint. Pull its open and click rates separately.\n\n---\n\n## Background\n\nChart choices, principles and gotchas for this area: [references/demand-gen-guide.md](references/demand-gen-guide.md).\n\n## Before you analyze\n\n- Load saved targets, budgets and known context with `manage_business_context` (`action: get`) and judge results against them, not generic benchmarks.\n- Query correctly: follow the `marketing-data-queries` skill for discovery, field IDs and platform quirks.\n- Check tracking first. If platform conversions and GA4 or backend numbers disagree by more than 20%, or spend continues with zero conversions, say so before any optimization advice.\n- Pull, then analyze, as separate steps. Run one heavy query at a time.\n- Evidence discipline: treat changes on fewer than ~10 conversions as noise, ignore items under 1,000 impressions, don't call learning-phase campaigns failures, check for shared budgets before budget advice, and re-pull before conceding a disputed number.\n- Answer shape: conclusion, business impact, next actions, then \"How I got this\" (one line per data pull).\n- Helper scripts in `scripts/` take a CSV and print a table. Run them if you can execute code; otherwise compute the same thing directly. Templates in `assets/` shape the final deliverable.\n\n## After the analysis\n\n- Analysis only recommends. If the user wants to act (pause, budget shift, negatives), use the `campaign-management` skill, with explicit approval for each change.\n- For a recurring or shareable result, offer once to publish it as a live Supermetrics Studio dashboard with `manage_dashboards` (static preview first, then the live upload).\n"
}SHA-256 of public snapshot: 1f8c54b3aba25cc3458f567608d1cfd8392d49acf8eaf37807c633d5f04b7b76