Skip to content

Organize a big account into folders

One giant campaigns.bid with every campaign, ad group, ad, and keyword in it gets unwieldy fast — a few hundred resources and twelve thousand lines is hard for anyone to navigate. You can split it into a folder tree organized however your team thinks about the account (by campaign family, by product line, by market) and bidsmith stitches it all back together.

How loading works

When you point any command at a folder, bidsmith loads every .bid file underneath it, at any depth — not just the ones sitting directly inside. All those files merge into a single namespace, so a campaign in one folder can reference a budget defined in another.

Terminal window
bidsmith validate . # walks the whole tree
bidsmith plan .
bidsmith apply .

The layout

Say your account has search, video, and remarketing campaigns that all draw on a few shared budgets and conversion actions. Put the account-level pieces at the top and give each campaign family its own folder:

  • Directorygoogle-ads/
    • account.bid provider, shared budgets, conversion actions
    • Directorycampaigns/
      • Directorysearch/
        • brand.bid
        • generic.bid
      • Directoryvideo/
        • awareness.bid
      • Directoryremarketing/
        • cart-abandoners.bid

Group the files however makes sense to the people editing them. The folder names are for humans — bidsmith doesn’t attach any meaning to them.

References still resolve across folders

Because everything merges into one namespace, a campaign in campaigns/search/brand.bid can point at a budget defined up in account.bid exactly as if they were in the same file:

account.bid
resource "google_ads_campaign_budget" "shared_daily" {
name = "Shared daily budget"
amount_micros = 50_000_000
delivery_method = "STANDARD"
}
campaigns/search/brand.bid
resource "google_ads_campaign" "brand" {
name = "Brand — Search"
campaign_budget = google_ads_campaign_budget.shared_daily
advertising_channel_type = "SEARCH"
status = "ENABLED"
}

No imports, no module wiring — just reference the resource by its address.

What bidsmith skips

When walking the tree, bidsmith ignores:

  • Hidden files and folders (anything starting with .), so .git/ and .bidsmith/ are never scanned.
  • node_modules/ and target/, so a docs site or build output sitting alongside your campaigns won’t trip it up.
  • Any file that doesn’t end in .bid — keep README.md, spreadsheets, and notes wherever you like.

See also