How-to recipes
Each recipe is a single concrete answer to a single concrete question. Short, copy-pasteable, no theory. For the why behind these patterns, see Core concepts.
Day-to-day operations
Pause everything for the holidays One PR pauses every campaign; git revert resumes them exactly.
Move a keyword between match types Switch a keyword from broad to phrase (or exact) with a two-line diff.
Roll back a bad change git revert + bidsmith apply. Three commands, full audit trail.
Audit who changed what, when Git is the audit log. Cheat sheet for the questions you'll actually ask.
Cut Google Ads API quota usage How bidsmith caches live state, plus --refresh-state and --offline for tight loops.
A plan reported errors that turned out not to be real Telling a stale snapshot from a genuinely broken change when plan comes back red.
Manage multiple client accounts One sign-in, many accounts — a per-folder bidsmith.toml routes each project to its own account.
See how your campaigns are performing Pull clicks, cost, and conversions into your terminal or a spreadsheet with bidsmith query.
Organize a big account into folders Split a large account across subfolders by campaign family; bidsmith loads the whole tree and references still resolve.
Cap how often people see your video ad Limit impressions and views per person per day, week, or month on a YouTube campaign.
Narrow a video campaign to a specific audience Build a search-intent segment, target the right channels and topics, and exclude the rest.
Launch a Demand Gen video ad The four things a Demand Gen creative needs — video, logo, button, brand name — and which of them bidsmith creates for you.
Make an audience observe instead of target The one-word switch that decides whether an audience narrows who sees your ad or only changes what you bid.
Stop counting pageviews as conversions Demote an imported analytics event to secondary so Smart Bidding buys leads instead of whoever loads a page.
Rename a resource without recreating it Clean up machine-generated names from a refresh — no delete, no recreate, no lost history.
Leave a note explaining a number Put the reasoning behind a budget or bid right next to the value, where the next person to change it has to read it.
See what a change costs before you merge it Every plan reports committed daily spend before and after, in your account's currency.
Budget a campaign that runs for a fixed period Give a launch or a sale one total to spend instead of a daily amount.
Adopt a campaign you built in the Google Ads UI Hand an existing campaign over to bidsmith with lifecycle { create = false } — the only workable path for Video.
Adopt sitelinks and callouts you already have Bring extensions added in the Google Ads UI into your files with bidsmith import, without creating duplicates.
Serve only the extensions you declared Turn on ownership so a campaign's sitelinks and callouts are exactly the ones in your files, and anything added elsewhere is removed.
Stop Google writing your ad copy Opt a campaign out of automatically created headlines and descriptions, and have CI catch it if someone switches them back on.
Put a video ad's tracking URL under review Bring a YouTube ad's UTM parameters out of the Google Ads UI and into a file someone approves.
Working with Claude
Use bidsmith in Claude Cowork Mount your credentials, allow the right domains, and let Cowork run bidsmith live in its sandbox.
More coming
This section grows from real questions. If you have a “how do I…?” that isn’t here, open an issue — it’s the fastest path to a recipe being written.
A non-exhaustive list of recipes that are on the way:
- Bulk-add keywords from a spreadsheet
- Set a different bid for one ad group
- Schedule a budget change for next Monday
- Find which campaigns reference a shared set
- Import a single campaign (not a whole account) via
bidsmith refresh - Run bidsmith from GitHub Actions on every merge