cross-source-insights10.6 KB
View saved version →
---
name: cross-source-insights
description: Explain marketing performance using relevant connected Google Ads, Meta Ads, LinkedIn Ads, Google Analytics 4, Google Search Console, Google Merchant Center and Google Tag Manager evidence. Use for changing results, wasted spend, budget priorities, organic traffic, shopping eligibility, tracking, landing pages and funnels, including single-source questions. Grounds custom Google Ads queries in live metadata. Use the loomascale skill for account setup and campaign changes.
---
# LoomaScale cross-source insights
Use LoomaScale to connect advertising delivery and cost to on-site behavior and
business outcomes, organic visibility, product eligibility and tracking configuration.
Answer the user's question with evidence, likely drivers and practical next steps.
The user's instructions take precedence
over this skill's workflow defaults; live tool schemas and server permissions
determine supported operations.
## Scope the question and choose sources
Identify the decision, business outcome, period and relevant accounts. Reuse the
conversation's context. If the period is unspecified, use the last 30 complete
days and the preceding equal-length period, stating the dates. When Search Console
is needed, use its finalized end date (normally three Pacific days ago) for a
direct cross-source comparison, or label differing windows explicitly. Ask only
when an unresolved business/account/property choice would materially change the answer;
continue independent reads while that choice is pending.
Choose sources by what they can explain, not simply because they are connected:
| Question | Evidence to combine when available |
|---|---|
| Why did leads, sales or ROAS change? | Relevant ad platforms' spend, delivery and reported outcomes; GA4 traffic, business events and revenue; then the largest changing campaign, device, geography or landing-page segments. |
| Where is spend being wasted? | Ad costs, search terms or creative performance; GA4 engagement and matching business outcomes. Distinguish poor traffic from on-site drop-off and missing measurement. |
| Which channel or campaign deserves budget? | Comparable ad costs and GA4 outcomes, current delivery/pacing and data volume. Treat platform-attributed results as a separate view. |
| Why do reports disagree? | Platform conversion definitions and attribution settings where exposed; GA4 event definitions, attribution, property settings and Google Ads links. |
| Where does the funnel break? | GA4 landing-page, device and ordered funnel reports; relevant ad campaign/source context. |
| Why did organic traffic fall, or which pages deserve work? | Search Console query/page changes and indexing evidence; GA4 organic landing-page behavior and business outcomes. Keep paid results separate. |
| Why did Shopping or Performance Max results decline? | Google Ads delivery and product performance where supported; Merchant Center account health, product issues and paid/free-listing performance. Verify the merchant relationship before attributing a campaign change to feed issues. |
| Is tracking configuration causing the discrepancy? | Relevant Google Ads conversion actions, Meta datasets, GA4 events/property context and GTM's published tags, triggers, variables and pending workspace changes. Configuration alone does not prove runtime behavior. |
For concrete diagnostic patterns and join rules, read
[the analysis guide](references/analysis-guide.md) when combining sources.
For standalone GA4, Search Console, Merchant Center or Tag Manager procedures,
read the [measurement and commerce guide](../loomascale/references/measurement-and-commerce.md)
only for the relevant integration.
## Discover accounts and establish comparable data
- Discover only relevant connections with `gads_list_ad_accounts`,
`meta_list_ad_accounts`, `linkedin_list_ad_accounts` and
`ga4_get_account_summaries`; use `gsc_list_sites`, `gmc_list_accounts` or
`gtm_list_containers` when their evidence is relevant and available. Use explicit
account/property/site/container IDs on subsequent reads. Google manager accounts
contain client accounts; query the relevant client.
Respect dashboard resource switches. Do not use `*_select_account` to scope
analysis: it changes a persistent default shared across chats.
- Before comparing GA4 with ads, call `ga4_get_property_details` for time zone and
currency. Use `ga4_list_google_ads_links` to verify the Google Ads relationship;
a matching account or property name alone is insufficient.
- Align inclusive date boundaries, time zones, currencies, conversion definitions
and reporting grain. When daily boundaries cannot be reconciled, say so. Keep
currencies separate unless an evidenced conversion basis is available.
- Prefer typed tools: `gads_get_insights`, `gads_list_search_terms`,
`gads_list_ads`, `meta_get_insights`, `meta_list_ads`, `linkedin_get_insights`
and `linkedin_analyze_demographics`, as relevant. Inspect their current schemas
for available breakdowns, date formats and account arguments.
- For GA4, use `ga4_run_report` for traffic, engagement and site outcomes;
`ga4_run_funnel_report` for ordered steps; `ga4_run_conversions_report` for its
supported attribution/ROAS metrics and dimensions. Its schema differs from
ordinary reports. Use `ga4_get_custom_dimensions_and_metrics` for property-specific
fields. Read current tool definitions; do not invent GA4 tools or field names.
## Ground every custom Google Ads query
Prefer a typed read when it answers the question. Before **every** `gads_query`,
complete this preflight; never send a speculative query to discover the schema:
1. Read the advertised `gads_query` input schema. Its arguments are `query`
(one GAQL SELECT string) and optional `customer_id`. Do not pass SQL-style
`fields`, `resource`, `filters`, `date_range` or `gaql` arguments to this tool.
2. Call `gads_get_resource_metadata` for the intended `FROM` resource before
constructing the query. Its arguments are `resource` and optional `contains`
and `limit`; it has no `customer_id` argument. Use `resource="metrics"` and
`resource="segments"` to look up those field families separately. Look up
attributed fields under their own resource too, such as `campaign` fields
used in a view query. Reuse metadata already returned in this conversation
only when it covers the same resource and every field about to be used.
3. Verify every SELECT, WHERE and ORDER BY field against returned names,
`selectable`, `filterable`, `sortable`, data types and `enumValues`. A truncated
metadata response is incomplete: narrow `contains` to the missing field.
Metadata confirms field definitions, **not** compatibility of every field
combination or whether every resource accepts date segments. If compatibility
is uncertain, consult the current Google Ads field documentation when available
or choose a supported typed read or narrower query; never promise validity from
metadata alone.
4. Write GAQL with snake_case paths and a bounded LIMIT. Use the question's exact
dates only on resources supporting the date segment. GAQL is not SQL: no JOIN,
OR, SQL functions, or parenthesized boolean expressions. Use supported IN
filters or separate queries. Send only schema-supported JSON arguments.
5. Interpret returned camelCase paths, the actual returned query and `truncated`
flag. Convert `costMicros` to currency units by dividing by 1,000,000; do not
apply that conversion to already-denominated costs from typed tools.
If a query fails validation, inspect the error, refresh metadata for the implicated
fields, and correct the query only when supported by that evidence. Retry once;
otherwise use a typed read or explain the precise missing evidence. If metadata
cannot be obtained, do not fall back to guessed GAQL.
## Diagnose before recommending
Start with totals and the comparison period, then drill into the largest changes.
Trace the relevant chain: spend → impressions → clicks → sessions → business
events → revenue. Clicks and sessions are different measures; a gap is a diagnostic
signal, not proof of tracking failure. Define the business event instead of treating
every GA4 key event as a lead or sale.
Join only on verified keys and at a compatible grain. Keep platform-attributed and
GA4-attributed conversions/revenue separate; never add them together as unique
business results. Do not sum platform conversions across channels as deduplicated
leads. Recompute aggregate ratios from totals, and label zero-denominator ratios
as unavailable. Never silently turn missing rows, errors or `(not set)` into zero.
Check paging and coverage before claiming totals: GA4 `rowCount`/`returnedRows`
and `offset`, Google Ads/Merchant Center query `truncated`, Search Console
`returnedRows`/`startRow` and other tools' limits. Search Console query `totals`
summarize the returned rows; use a separate ungrouped report for property totals.
Fetch remaining needed rows or report partial coverage. Preserve sampling, thresholding,
freshness or data-loss warnings. Recent conversion lag and small samples limit
conclusions. Distinguish observations, plausible explanations and tests that could
confirm them; correlation does not establish causation.
## Deliver an answer the user can act on
Lead with the answer to the decision. Include only the comparisons that support it,
then rank the likely drivers by measured contribution where possible. For each
material finding, identify its source/account/property, dates, metric definition
and relevant filter; use returned report links when available, never invent links.
Show absolute changes with relative changes, and percentage-point changes for
rates. Explain conflicts between sources rather than choosing a convenient number.
Recommend actions tied to the evidence and a way to measure their effect. Separate
observed facts from hypotheses and conditional upside estimates. If a missing
connection blocks a conclusion, explain which question that source would resolve
and provide the supported partial answer. Users manage connections in the
[LoomaScale dashboard](https://ai.loomascale.com/dashboard/connections).
Analysis does not authorize changes to ads. This workflow uses read-only tools;
present proposed budget, campaign or tracking changes for the user's decision.
Honor existing explicit authorization for any separately requested action, its
tool's permissions and the configured spend cap; use the
[LoomaScale workflow skill](../loomascale/SKILL.md) for execution.
LinkedIn Ads, GA4, Search Console, Merchant Center and Tag Manager tools are
read-only.
If a plan/trial limit blocks a read, use `loomascale_check_quota` and
report the limitation without retry loops.
Referenced files: 2 — file references are metadata, not package contents.
loomascale8.55 KB
View saved version →
---
name: loomascale
description: Work with connected LoomaScale integrations for Google Ads, Meta Ads (Facebook and Instagram), LinkedIn Ads, Google Analytics 4, Google Search Console, Google Merchant Center and Google Tag Manager. Use to discover accounts, audit performance or tracking, research keywords, diagnose organic search or shopping issues, and carry out requested Google Ads or Meta Ads campaign changes. Use cross-source-insights for detailed performance and attribution analysis.
---
# LoomaScale integration workflows
LoomaScale connects advertising, analytics, organic search, shopping and tracking
data through its MCP tools. Use the smallest relevant set of integrations to
answer the question or complete the requested action. Google Ads and Meta Ads
support campaign changes; LinkedIn Ads, GA4, Search Console, Merchant Center and
Tag Manager provide read-only reporting and diagnosis.
## Start with the user's task
Identify the intended result: a report, diagnosis, recommendation, campaign draft
or authorized change. Reuse the conversation's accounts, dates and business goal.
Discover only the resources needed; do not run an account-wide audit for a narrow
question. Ask only for a missing choice that materially affects the result, such
as which of several client accounts to change.
Inspect the available tool descriptions and input schemas before calling them.
Names below are the server's tool names; a client may add a namespace prefix.
Live schemas and permissions take precedence over examples in this skill. Do not
invent tools, arguments or access to an integration that the client does not expose.
## Which integration answers the question?
| Integration and purpose | Discover the target | Begin with |
|---|---|---|
| Google Ads: paid search, Shopping, Performance Max, keywords, budgets and delivery | `gads_list_ad_accounts` | `gads_get_insights`, `gads_list_campaigns`, `gads_list_search_terms`; `gads_check_pacing` for today's delivery |
| Meta Ads: Facebook/Instagram campaigns, creatives, audiences and delivery | `meta_list_ad_accounts` | `meta_get_insights`, `meta_list_campaigns`, `meta_list_ads`, `meta_get_delivery_issues` |
| LinkedIn Ads: B2B campaign results, leads and professional demographics | `linkedin_list_ad_accounts` | `linkedin_get_insights`, `linkedin_list_campaigns`, `linkedin_analyze_demographics` |
| Google Analytics 4 (GA4): website traffic, business events, revenue and funnels | `ga4_get_account_summaries` | `ga4_get_property_details`, then the appropriate report |
| Google Search Console (GSC): organic queries, pages, search visibility and indexing | `gsc_list_sites` | `gsc_compare_periods`, `gsc_query_search_analytics`, opportunity tools or `gsc_inspect_url` |
| Google Merchant Center (GMC): product eligibility, account issues and shopping performance | `gmc_list_accounts` | `gmc_get_account_health`, then `gmc_query` |
| Google Tag Manager (GTM): published tracking configuration and pending changes | `gtm_list_containers` | `gtm_get_container`, `gtm_audit_tracking`, `gtm_get_workspace_status` |
Read only the guide needed for the task:
- [Advertising workflows](references/advertising.md): paid performance, keyword
research, creative review, campaign creation and authorized changes.
- [Measurement, search and commerce](references/measurement-and-commerce.md): GA4
report selection, Search Console diagnostics, Merchant Center MCQL and GTM audits.
- [Cross-source insights](../cross-source-insights/SKILL.md): explain changing
results, compare channels, diagnose attribution and ground every custom Google
Ads GAQL query in live metadata. This can also answer a single-source question.
## Resolve accounts once and carry their IDs forward
Use explicit discovered targets on subsequent calls. Preserve IDs as strings.
| Integration | Target argument and form |
|---|---|
| Google Ads | `customer_id`: serving client ID, digits without dashes; a manager/MCC holds no campaigns |
| Meta Ads | `ad_account_id`: discovered `act_...` account ID; check returned manage access before changes |
| LinkedIn Ads | `ad_account_id`: discovered numeric account ID |
| GA4 | `property_id`: property number or `properties/<number>` |
| Search Console | `site_url`: exact `sc-domain:example.com` or URL-prefix property, preserving its slash |
| Merchant Center | `account_id`: numeric standalone/sub-account ID; an advanced account itself has no reports |
| Tag Manager | `container`: discovered `GTM-...` ID or API resource path |
Do not call `gads_select_account`, `meta_select_account` or
`linkedin_select_account` merely to scope a report: they change a persistent
default shared across chats. Use them only when changing that default is the task.
Respect resources switched off in the dashboard; do not bypass a disabled target
with an alternate ID. A partial discovery result is not proof that no accounts exist.
For "what is connected?", use the relevant per-integration discovery tools; there
is no unified connection-list tool. If a full inventory was requested, run the
available discovery reads independently and summarize reachable resources and
access errors. An empty resource list or absent tool does not establish that a
dashboard connection is missing. Distinguish disconnected, disabled, inaccessible,
still-discovering and unavailable states using the evidence returned.
## Keep reads efficient and results comparable
For historical analysis without a supplied period, use the last 30 complete days
and a preceding equal-length comparison, stating the dates. For Search Console,
use its finalized window (normally ending three Pacific days ago); for a direct
cross-source comparison use that same end date for the other reports. Honor
explicit dates, today's pacing requests and realtime questions. Read each tool's
date schema instead of copying arguments across platforms.
Start with totals, then investigate material changes. Parallelize independent
reads only after resolving their targets. Fetch required pages or disclose partial
coverage; never present a row-limited ranking as an exhaustive account total.
Keep currencies and attribution definitions distinct. Platform conversions, GA4
outcomes and organic search clicks are different measures. The cross-source guide
provides the matching and aggregation rules when combining them.
## Complete changes within the user's authorization
Analysis and recommendations do not authorize campaign changes. For a requested
change, read current state, resolve the precise target and budget/currency, use
the narrowest supported write, and read back the resulting state. Honor existing
explicit authorization; do not ask again for the same scope. Prepare any required
reviewable proposal before asking for a missing decision.
Campaign and ad creation tools create paused objects; activation is a separate
step within the user's authorized scope. Existing-object edits and Meta experiment
creation can affect live delivery immediately. Follow the advertising guide for
targeting defaults, budget ownership, preview flags and safe recovery. Do not
assume a daily budget cap guarantees total spend across campaigns.
## Recover from blocked or incomplete work
- Missing or expired connection: use the tool's connect/reconnect link, or the
[LoomaScale connections dashboard](https://ai.loomascale.com/dashboard/connections).
A team member needs their own upstream login. Continue useful authorized reads.
- Missing tool or access: state the unavailable capability and provide supported
partial findings. Do not repeatedly call an unavailable tool.
- Plan/trial limit: call `loomascale_check_quota` once and explain the reported
allowance/reset. Its quota is not an ad budget or account balance.
- Permission or budget-cap refusal: explain the exact blocker; do not switch
accounts, raise caps or shrink the requested action to evade it.
- Invalid read: use the error and schema to make one evidenced correction, then
report the remaining limitation. For GAQL follow the stricter metadata preflight.
- Timed-out or partially failed write: reconcile current objects and returned IDs
before retrying. Repeating a create can duplicate campaigns, ads or experiments.
## Return an actionable result
Lead with the answer or completed action. Give the account/property, exact dates,
evidence and material limitations needed to assess it. For changes, include object
IDs, verified resulting status/budget and anything still blocked. Distinguish a
saved configuration from actual ad delivery or a tag firing in a browser. For
read-only integrations, give specific fixes and where the user must apply them;
do not claim to have edited feeds, requested indexing or published GTM changes.
Referenced files: 3 — file references are metadata, not package contents.