[[campaigns.ad_groups]] entries, keeping them tightly scoped to the ad group they belong to. Negative keywords can be added at two levels — ad group or campaign — giving you precise control over which searches trigger (or skip) your ads.
Full Example
[[campaigns.ad_groups.keywords]]
Positive keywords that trigger ads in this ad group. An ad group should contain keywords that share a common theme so that your ad copy can speak directly to the search intent.
The keyword text. Do not include match type syntax characters (quotes or square brackets) in the text value — match type is controlled separately via the
match_type field.Controls how closely a user’s search query must match the keyword for the ad to be eligible to show.
| Value | Matches |
|---|---|
"EXACT" | Searches with the same meaning as the keyword, with no extra context |
"PHRASE" | Searches that include the meaning of the keyword |
"BROAD" | Searches related to the keyword, including synonyms and related concepts |
Whether the keyword is active. Optional — omit it for an enabled keyword (Adjar only writes the field for paused ones, keeping the file terse).
Unlike
| Value | Behaviour |
|---|---|
"ENABLED" | Keyword is live and can trigger ads |
"PAUSED" | Keyword is suspended |
text and match_type (which are immutable — changing either recreates the keyword), status is patched in place, so a paused→enabled flip is a cheap update. This field applies to positive ad-group keywords only; campaign- and ad-group-level negatives ignore it.[[campaigns.ad_groups.negative_keywords]]
Negative keywords at the ad group level prevent ads in that specific ad group from showing on matching searches. Use ad-group-level negatives when you want to block a term for one ad group without affecting others in the same campaign (for example, when different ad groups handle different segments of your keyword space).
The keyword text to exclude from this ad group. As with positive keywords, do not include match type syntax in the text value.
How broadly this negative keyword blocks traffic for this ad group.
| Value | Blocks |
|---|---|
"BROAD" | Any search containing all words in any order |
"PHRASE" | Searches containing the exact phrase (with any words before or after) |
"EXACT" | Searches that match the keyword meaning exactly |
[[campaigns.negative_keywords]]
Negative keywords at the campaign level apply across every ad group in the campaign. Use campaign-level negatives for terms that are irrelevant to the entire campaign — for example, excluding a competitor’s brand name or a job-search intent keyword.
The keyword text to exclude across all ad groups in this campaign.
How broadly this negative keyword blocks traffic across the campaign.
| Value | Blocks |
|---|---|
"BROAD" | Any search containing all words in any order |
"PHRASE" | Searches containing the exact phrase |
"EXACT" | Searches that match the keyword meaning exactly |
Campaign vs. Ad Group Negatives
| Scope | TOML path | Applies to |
|---|---|---|
| Campaign | [[campaigns.negative_keywords]] | All ad groups in the campaign |
| Ad group | [[campaigns.ad_groups.negative_keywords]] | Only the containing ad group |
Match Type Behaviour
Adjar uses standard Google Ads match type semantics. Here is a quick reference:| Match type | Keyword example | Also matches |
|---|---|---|
EXACT | just in time access | ”just-in-time access”, “JIT access” (close variants) |
PHRASE | database access | ”secure database access”, “database access management” |
BROAD | database access | ”DB access”, “access to database”, “privileged access management” |
Related Pages
- Campaigns — campaign-level fields, budgets, and targeting
- Creatives — ads, headlines, and descriptions that live alongside keywords in ad groups
- Account Root — how campaign files are imported