Gaql Reference logo

Gaql Reference

Organization
cognyai
gaql-reference

Google Ads Query Language (GAQL) Reference — complete syntax, resource types, fields, operators, date macros, and ready-to-use query patterns

Overview

Publishercognyai
Repositoryclaude-code-marketing-skills
Skill namegaql-reference
Stars
111
Forks
15
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by cognyai on GitHub. Read the source before you install it.

Installation

Install the Gaql Reference AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/gaql-reference
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/cognyai/claude-code-marketing-skills.git /tmp/claude-code-marketing-skills
mkdir -p .claude/skills
cp -r /tmp/claude-code-marketing-skills/skills/gaql-reference .claude/skills/gaql-reference
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Gaql Reference in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Gaql Reference on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Gaql Reference is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Google Ads Query Language (GAQL) Reference

Complete reference for GAQL syntax, resource types, fields, operators, date macros, and common query patterns for Google Ads reporting and optimization.

Full docs: https://cogny.com/docs/gaql-reference

Usage

/gaql-reference                           # Show full syntax overview
/gaql-reference search terms              # Search terms report pattern
/gaql-reference quality score             # Quality Score analysis query
/gaql-reference impression share          # Budget & impression share query
/gaql-reference geographic                # Geographic performance query
/gaql-reference change history            # Change history audit query

Instructions

You are a Google Ads Query Language (GAQL) expert. Use this reference to help users write correct GAQL queries, understand resource types, choose the right fields, and avoid common pitfalls.

When the user asks a question, find the relevant section below and provide precise, actionable answers with ready-to-use GAQL examples.

If the user provides a specific topic as an argument, focus on that area. Otherwise, provide an overview of the GAQL syntax and available resources.

When the user has Cogny MCP tools available, prefer using mcp__cogny__mcp__Google_Ads__tool_execute_gaql to run queries directly and mcp__cogny__mcp__Google_Ads__tool_get_gaql_doc or mcp__cogny__mcp__Google_Ads__tool_get_reporting_view_doc for API documentation lookups.

Run it live

If Cogny isn't connected, skip this and note what connecting adds.

EngineHowNote
Google Adsmcp__cogny__mcp__Google_Ads__tool_execute_gaql (after tool_list_accessible_accounts)Free without an account: the reference still works, queries just aren't run
Microsoft AdsNo GAQL. mcp__cogny__mcp__Bing_Ads__tool_get_report (report_type: campaign, ad_group, keyword, search_query, ad, geographic; optional columns)Money in account-currency units, percents as percents

Syntax

Formal Grammar

query         = SELECT field_list FROM resource_name
                [ WHERE condition_list ]
                [ ORDER BY ordering { , ordering } ]
                [ LIMIT positive_integer ]
                [ PARAMETERS param_list ]

field_list    = field_name { , field_name }
condition_list = condition { AND condition }
condition     = field_name operator value
ordering      = field_name [ ASC | DESC ]
param_list    = param_name = param_value { , param_name = param_value }

Clauses

ClauseRequiredDescription
SELECTYesFields to return (resource fields, metrics, segments)
FROMYesSingle resource type to query
WHERENoFilter conditions joined by AND (no OR support)
ORDER BYNoSort by one or more comma-separated fields, each ASC or DESC
LIMITNoMaximum number of rows to return
PARAMETERSNoQuery-level parameters (e.g., include_drafts = true)

Example

sql
SELECT
  campaign.name,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros
FROM campaign
WHERE campaign.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.impressions DESC
LIMIT 50

Resource Types (FROM Clause)

Campaign Management

ResourceDescription
campaignCampaign settings, status, bidding, budget
campaign_budgetShared and campaign-level budgets
campaign_criterionCampaign-level targeting criteria
campaign_bid_modifierBid adjustments at campaign level
bidding_strategyPortfolio bidding strategies

Ad Groups & Ads

ResourceDescription
ad_groupAd group settings, status, targeting
ad_group_adAds within ad groups (RSA, ETA, etc.)
ad_group_ad_asset_viewAsset-level performance for responsive ads
ad_group_criterionKeywords, audiences, and other criteria
ad_group_bid_modifierBid adjustments at ad group level

Performance Views

ResourceDescription
keyword_viewKeyword-level performance metrics
search_term_viewActual search queries that triggered ads
landing_page_viewLanding page performance
geographic_viewPerformance by geographic location
location_viewPerformance by targeted/excluded location
age_range_viewPerformance by age range demographic
gender_viewPerformance by gender demographic
user_location_viewPerformance by user's physical location
display_keyword_viewDisplay network keyword performance
topic_viewDisplay/video topic targeting performance
managed_placement_viewManaged placement performance

Conversion & Attribution

ResourceDescription
conversion_actionConversion action configuration
customer_conversion_goalConversion goals and optimization settings

Account & Extensions

ResourceDescription
customerAccount-level settings
assetAccount assets (sitelinks, callouts, images)
asset_groupPerformance Max asset groups
asset_group_assetAssets within asset groups

Change History

ResourceDescription
change_statusRecent changes to account entities
change_eventDetailed change history with old/new values

Common Fields

Campaign Fields

FieldTypeDescription
campaign.idINT64Unique campaign ID
campaign.nameSTRINGCampaign name
campaign.statusENUMENABLED, PAUSED, REMOVED
campaign.advertising_channel_typeENUMSEARCH, DISPLAY, SHOPPING, VIDEO, PERFORMANCE_MAX
campaign.bidding_strategy_typeENUMTARGET_CPA, TARGET_ROAS, MAXIMIZE_CONVERSIONS, MANUAL_CPC, etc.
campaign.campaign_budgetRESOURCEBudget resource name
campaign.start_dateDATECampaign start date
campaign.end_dateDATECampaign end date
campaign.serving_statusENUMSERVING, NONE, ENDED, PENDING, SUSPENDED
campaign.target_cpa.target_cpa_microsINT64Target CPA in micros
campaign.target_roas.target_roasDOUBLETarget ROAS as a ratio

Ad Group Fields

FieldTypeDescription
ad_group.idINT64Unique ad group ID
ad_group.nameSTRINGAd group name
ad_group.statusENUMENABLED, PAUSED, REMOVED
ad_group.typeENUMSEARCH_STANDARD, DISPLAY_STANDARD, SHOPPING_PRODUCT_ADS, etc.
ad_group.cpc_bid_microsINT64Default CPC bid in micros
ad_group.target_cpa_microsINT64Ad group-level target CPA

Ad Fields

FieldTypeDescription
ad_group_ad.ad.idINT64Unique ad ID
ad_group_ad.ad.typeENUMRESPONSIVE_SEARCH_AD, EXPANDED_TEXT_AD, etc.
ad_group_ad.ad.final_urlsSTRING (repeated)Landing page URLs
ad_group_ad.statusENUMENABLED, PAUSED, REMOVED
ad_group_ad.ad.responsive_search_ad.headlinesMESSAGE (repeated)RSA headline assets
ad_group_ad.ad.responsive_search_ad.descriptionsMESSAGE (repeated)RSA description assets
ad_group_ad.policy_summary.approval_statusENUMAPPROVED, DISAPPROVED, etc.

Keyword & Criterion Fields

FieldTypeDescription
ad_group_criterion.criterion_idINT64Criterion ID
ad_group_criterion.keyword.textSTRINGKeyword text
ad_group_criterion.keyword.match_typeENUMBROAD, PHRASE, EXACT
ad_group_criterion.statusENUMENABLED, PAUSED, REMOVED
ad_group_criterion.quality_info.quality_scoreINT32Quality Score (1-10)
ad_group_criterion.quality_info.creative_quality_scoreENUMBELOW_AVERAGE, AVERAGE, ABOVE_AVERAGE
ad_group_criterion.quality_info.post_click_quality_scoreENUMLanding page experience
ad_group_criterion.quality_info.search_predicted_ctrENUMExpected CTR
ad_group_criterion.effective_cpc_bid_microsINT64Effective CPC bid
ad_group_criterion.position_estimates.first_page_cpc_microsINT64Estimated first page CPC

Search Term Fields

FieldTypeDescription
search_term_view.search_termSTRINGActual user search query
search_term_view.statusENUMADDED, EXCLUDED, ADDED_EXCLUDED, NONE

Metrics

FieldTypeDescription
metrics.impressionsINT64Number of impressions
metrics.clicksINT64Number of clicks
metrics.cost_microsINT64Cost in micros (divide by 1,000,000)
metrics.ctrDOUBLEClick-through rate
metrics.average_cpcDOUBLEAverage CPC in micros
metrics.average_cpmDOUBLEAverage CPM in micros
metrics.conversionsDOUBLEConversions
metrics.conversions_valueDOUBLETotal conversion value
metrics.cost_per_conversionDOUBLECost per conversion in micros
metrics.all_conversionsDOUBLEAll conversions (including cross-device)
metrics.all_conversions_valueDOUBLEAll conversions value
metrics.view_through_conversionsINT64View-through conversions
metrics.search_impression_shareDOUBLESearch impression share (0.0-1.0)
metrics.search_top_impression_shareDOUBLETop impression share
metrics.search_absolute_top_impression_shareDOUBLEAbsolute top impression share
metrics.search_budget_lost_impression_shareDOUBLEIS lost to budget
metrics.search_rank_lost_impression_shareDOUBLEIS lost to rank
metrics.interaction_rateDOUBLEInteraction rate
metrics.interactionsINT64Interactions
metrics.video_viewsINT64Video views
metrics.video_view_rateDOUBLEVideo view rate
metrics.invalid_clicksINT64Invalid clicks filtered by Google

Segments

FieldTypeDescription
segments.dateDATEDate (YYYY-MM-DD)
segments.day_of_weekENUMMONDAY through SUNDAY
segments.monthDATEFirst day of the month
segments.quarterDATEFirst day of the quarter
segments.yearINT32Year
segments.hourINT32Hour of day (0-23)
segments.deviceENUMDESKTOP, MOBILE, TABLET, OTHER
segments.ad_network_typeENUMSEARCH, SEARCH_PARTNERS, CONTENT, YOUTUBE_SEARCH, YOUTUBE_WATCH
segments.slotENUMTOP, OTHER
segments.conversion_actionRESOURCEConversion action resource name
segments.conversion_action_nameSTRINGConversion action name
segments.conversion_action_categoryENUMConversion action category
segments.click_typeENUMURL_CLICKS, CALLS, SITELINKS, etc.
segments.keyword.info.textSTRINGKeyword text (in search_term_view)
segments.keyword.info.match_typeENUMKeyword match type

WHERE Clause Operators

Comparison Operators

OperatorExample
=campaign.status = 'ENABLED'
!=campaign.status != 'REMOVED'
>metrics.impressions > 100
<metrics.ctr < 0.02
>=metrics.clicks >= 10
<=metrics.cost_micros <= 5000000

Set Operators

OperatorExample
INcampaign.status IN ('ENABLED', 'PAUSED')
NOT INcampaign.advertising_channel_type NOT IN ('VIDEO', 'DISPLAY')
CONTAINS ANYcampaign.labels CONTAINS ANY ('customers/123/labels/456')
CONTAINS ALLcampaign.labels CONTAINS ALL ('..label1..', '..label2..')
CONTAINS NONEcampaign.labels CONTAINS NONE ('customers/123/labels/456')

String Operators

OperatorExample
LIKEcampaign.name LIKE '%Brand%'
NOT LIKEcampaign.name NOT LIKE '%Test%'

Null Checks

OperatorExample
IS NULLad_group_criterion.quality_info.quality_score IS NULL
IS NOT NULLad_group_criterion.quality_info.quality_score IS NOT NULL

Range Operators

OperatorExample
BETWEENsegments.date BETWEEN '2025-01-01' AND '2025-01-31'
DURINGsegments.date DURING LAST_30_DAYS

Date Macros (DURING)

MacroDescription
TODAYToday only
YESTERDAYYesterday only
LAST_7_DAYSLast 7 days (not including today)
LAST_14_DAYSLast 14 days
LAST_30_DAYSLast 30 days
LAST_BUSINESS_WEEKMonday-Friday of previous week
THIS_WEEK_MON_TODAYMonday of this week through today
THIS_WEEK_SUN_TODAYSunday of this week through today
THIS_MONTHFirst day of this month through today
LAST_MONTHEntire previous month

Common Query Patterns

Campaign Performance Report

sql
SELECT
  campaign.id,
  campaign.name,
  campaign.status,
  campaign.advertising_channel_type,
  campaign.bidding_strategy_type,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions,
  metrics.conversions_value,
  metrics.cost_per_conversion
FROM campaign
WHERE campaign.status != 'REMOVED'
  AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC

Search Terms Report (Negative Keyword Identification)

sql
SELECT
  search_term_view.search_term,
  search_term_view.status,
  segments.keyword.info.text,
  segments.keyword.info.match_type,
  campaign.name,
  ad_group.name,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions,
  metrics.cost_per_conversion
FROM search_term_view
WHERE campaign.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
  AND metrics.impressions > 10
ORDER BY metrics.cost_micros DESC
LIMIT 1000

Filter for high-cost, zero-conversion terms to build negative keyword lists.

Quality Score Analysis

sql
SELECT
  campaign.name,
  ad_group.name,
  ad_group_criterion.keyword.text,
  ad_group_criterion.keyword.match_type,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.quality_info.post_click_quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros,
  metrics.conversions
FROM keyword_view
WHERE campaign.status = 'ENABLED'
  AND ad_group.status = 'ENABLED'
  AND ad_group_criterion.status = 'ENABLED'
  AND ad_group_criterion.quality_info.quality_score IS NOT NULL
  AND segments.date DURING LAST_30_DAYS
ORDER BY ad_group_criterion.quality_info.quality_score ASC

Landing Page Performance

sql
SELECT
  landing_page_view.unexpanded_final_url,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions,
  metrics.cost_per_conversion
FROM landing_page_view
WHERE campaign.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
  AND metrics.clicks > 0
ORDER BY metrics.clicks DESC
LIMIT 100

Device Breakdown

sql
SELECT
  campaign.name,
  segments.device,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions,
  metrics.cost_per_conversion
FROM campaign
WHERE campaign.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
ORDER BY campaign.name, segments.device

Geographic Performance

sql
SELECT
  geographic_view.country_criterion_id,
  geographic_view.location_type,
  campaign.name,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions,
  metrics.conversions_value,
  metrics.cost_per_conversion
FROM geographic_view
WHERE campaign.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
  AND metrics.impressions > 0
ORDER BY metrics.cost_micros DESC
LIMIT 200

Ad Copy Performance (RSA Asset-Level)

sql
SELECT
  campaign.name,
  ad_group.name,
  ad_group_ad.ad.id,
  ad_group_ad.ad.responsive_search_ad.headlines,
  ad_group_ad.ad.responsive_search_ad.descriptions,
  ad_group_ad.ad.final_urls,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions
FROM ad_group_ad
WHERE campaign.status = 'ENABLED'
  AND ad_group.status = 'ENABLED'
  AND ad_group_ad.status = 'ENABLED'
  AND ad_group_ad.ad.type = 'RESPONSIVE_SEARCH_AD'
  AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.impressions DESC

Asset-level performance:

sql
SELECT
  campaign.name,
  ad_group.name,
  ad_group_ad_asset_view.field_type,
  ad_group_ad_asset_view.performance_label,
  asset.text_asset.text,
  metrics.impressions,
  metrics.clicks,
  metrics.ctr,
  metrics.cost_micros,
  metrics.conversions
FROM ad_group_ad_asset_view
WHERE campaign.status = 'ENABLED'
  AND ad_group.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
ORDER BY ad_group_ad_asset_view.performance_label DESC, metrics.impressions DESC

Budget Utilization / Impression Share

sql
SELECT
  campaign.name,
  campaign.campaign_budget,
  campaign_budget.amount_micros,
  campaign.bidding_strategy_type,
  metrics.impressions,
  metrics.cost_micros,
  metrics.search_impression_share,
  metrics.search_top_impression_share,
  metrics.search_absolute_top_impression_share,
  metrics.search_budget_lost_impression_share,
  metrics.search_rank_lost_impression_share
FROM campaign
WHERE campaign.status = 'ENABLED'
  AND campaign.advertising_channel_type = 'SEARCH'
  AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.search_budget_lost_impression_share DESC

Conversion Action Breakdown

sql
SELECT
  campaign.name,
  segments.conversion_action_name,
  segments.conversion_action_category,
  metrics.conversions,
  metrics.conversions_value,
  metrics.all_conversions,
  metrics.all_conversions_value
FROM campaign
WHERE campaign.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS
  AND metrics.all_conversions > 0
ORDER BY metrics.conversions DESC

segments.conversion_action_name (and the other conversion-action segments) can't be combined with cost metrics: metrics.cost_per_conversion or metrics.cost_micros fails with PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE. For cost per conversion by action, run a second query without the segment for metrics.cost_micros, then divide client-side. Filtering on all_conversions keeps secondary (non-primary) actions, which report 0 in metrics.conversions.

Change History Audit

sql
SELECT
  change_event.change_date_time,
  change_event.change_resource_type,
  change_event.change_resource_name,
  change_event.resource_change_operation,
  change_event.changed_fields,
  change_event.old_resource,
  change_event.new_resource,
  change_event.user_email
FROM change_event
WHERE change_event.change_date_time DURING LAST_14_DAYS
  AND change_event.change_resource_type IN (
    'CAMPAIGN', 'AD_GROUP', 'AD_GROUP_AD',
    'AD_GROUP_CRITERION', 'CAMPAIGN_BUDGET'
  )
ORDER BY change_event.change_date_time DESC
LIMIT 500

Gotchas and Important Notes

cost_micros Requires Division

All cost fields are in micros (1/1,000,000 of the currency unit):

Actual cost = metrics.cost_micros / 1,000,000
Actual CPC  = metrics.average_cpc / 1,000,000

Example: cost_micros = 5430000 means $5.43.

Segment + Metric Compatibility

  • segments.conversion_action — impressions/clicks repeat across each conversion action row. Do not sum them.
  • segments.click_type — clicks and impressions fragment by click type. Summing overcounts.
  • segments.slot — only compatible with search campaigns.
  • segments.hour — cannot be combined with segments.date for some resources.
  • Check the Google Ads API field compatibility matrix when in doubt.

Date Range Requirements

  • Queries with metrics.* fields require a date range (segments.date DURING ... or BETWEEN).
  • Resource-only queries (no metrics) do not need a date range.

Enum Values

Enum fields must use string constant names:

  • CampaignStatus: ENABLED, PAUSED, REMOVED
  • AdGroupStatus: ENABLED, PAUSED, REMOVED
  • AdvertisingChannelType: SEARCH, DISPLAY, SHOPPING, VIDEO, PERFORMANCE_MAX, MULTI_CHANNEL, LOCAL, SMART, HOTEL, DEMAND_GEN (formerly DISCOVERY, which is no longer a valid enum and fails with BAD_ENUM_CONSTANT)
  • KeywordMatchType: BROAD, PHRASE, EXACT
  • BiddingStrategyType: TARGET_CPA, TARGET_ROAS, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, MANUAL_CPC, TARGET_IMPRESSION_SHARE; ENHANCED_CPC is deprecated (no longer available for Search and Display since March 2025) but can still appear on old campaigns
  • Device: DESKTOP, MOBILE, TABLET, CONNECTED_TV, OTHER
  • QualityScoreBucket: BELOW_AVERAGE, AVERAGE, ABOVE_AVERAGE

Rate Limits

Daily operations per developer token (access levels, rolling 24 hours):

  • Explorer access: 2,880 operations/day on production accounts.
  • Basic access: 15,000 operations/day.
  • Standard access: unlimited operations/day.
  • Short-term rate limits (RESOURCE_EXHAUSTED) still apply at every level; back off and retry.
  • Use SearchStream for large result sets (one operation regardless of size).

Other Pitfalls

  • No OR: All WHERE conditions are AND-joined. Use IN or separate queries.
  • No joins: GAQL queries operate on a single resource.
  • No GROUP BY: Aggregation is implicit by selected fields + segments.
  • No aliases: Cannot use AS in GAQL.
  • No arithmetic: Calculate cost_micros / 1000000 client-side.
  • Segment auto-grouping: Adding a segment splits rows by that dimension.
  • Removed resources: Returned by default (unlike the UI, the API doesn't hide them). Add WHERE campaign.status != 'REMOVED' (or the resource's own status) to match the UI.
  • PARAMETERS clause: include_drafts = true for drafts, omit_unselected_resource_names = true to reduce response size.

Resources

Frequently asked questions

What does the Gaql Reference AI skill do?

Google Ads Query Language (GAQL) Reference — complete syntax, resource types, fields, operators, date macros, and ready-to-use query patterns

Why use Gaql Reference on TypingMind?

Because you install it once and use it with any model. Gaql Reference is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Gaql Reference in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/gaql-reference. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Gaql Reference?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Gaql Reference?

As many as you like. As long as a model supports skills, you can use Gaql Reference with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Gaql Reference AI skill free?

It is published on GitHub by cognyai. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇