Blue Sky Fitness Supply
Team Portal
Sign in to continue
Forgot password?Invalid email or password
Reset Password
Enter your email and we'll send a reset link
← Back to loginCheck your email for a reset link.
Search Term Review
Loading this week’s batch…
What this page is, and exactly what to do
This replaces the spreadsheet. Same job: look at what people actually searched to reach us, and decide which searches we keep paying for. Nothing you do here touches Google Ads by itself — the negatives leave as CSV files that get uploaded.
The two decisions, and what they mean
- Keep — we still want ads on this search. The tier beside it moves the term to that tier's campaign. It never blocks anything.
- Negate — stop showing ads on this search. This one is permanent once uploaded, and a wrongly blocked search is a customer who silently never finds us. When unsure, Keep it at LOW rather than Negate it.
- Neither — leaving a row alone is a real answer. It is undecided, not approved: it comes back next time instead of being treated as agreement. Clicked the wrong one? Click the same button again and the row goes back to undecided.
The tiers, which are easy to get backwards
It is a funnel, and the names describe where in the funnel the search sits — not how much we want it. HIGH means high up the funnel: broad, early, still figuring it out. LOW means low down the funnel: specific, ready to buy. So we bid least on HIGH and most on LOW.
- HIGH — broadest, cheapest. Generic research searches: "gym flooring", "pavers", "sauna", "garage flooring options". High volume, high risk of irrelevant clicks, so we pay little per click.
- MED — product-specific, no brand. "rubber gym tiles", "infrared sauna", "rubber floor stripper".
- LOW — most specific, highest intent, where we bid hardest. Someone naming the exact thing: "maxxus 2 person sauna", "ecore e grip iii adhesive". These cost several dollars a click and are worth it.
This is why the tiers matter more than they look. A term does not have to look like a strong buyer to be a Keep. If we sell the product, an odd or marginal use of it usually belongs at HIGH — that is how speculative traffic gets priced down instead of blocked. Negating is for people who could never buy from us at all. "Do we sell this?" decides Keep vs Negate; "how broad is this search?" decides the tier.
Every week (or whenever you get to it)
- Open this page when the "Search terms ready to review" email arrives. Nothing expires. If you skip a week, the next batch simply covers a wider range, and any calls you already made carry over.
- Work down the list. It is grouped by campaign, and inside each campaign the biggest spend is first. The top handful of rows carry most of the money, so stopping partway down is a perfectly good week's work.
- Don't try to do every row. By default you are shown only rows that cost money or drew real impressions. The banner above the table always says how many are hidden and lets you see them.
- Watch the “also in” line. When the same search ran in more than one campaign that week, the row says so and shows what it cost in each. That is the cannibalisation you cannot see one row at a time: keeping a term in two campaigns means bidding against yourself for the same click. The page deliberately does not tell you which campaign should win — that depends on which one converts, and conversions are not in this report. Negating a term in one campaign never touches the others; negatives are campaign-scoped.
- Terms you have settled stop coming back. Once you have personally clicked Keep on the same term in three separate weeks, it drops out of the default view — you have answered that question and the page stops asking. It is only ever hidden, never dropped: the banner counts them and “show settled” brings them straight back, and they are in the CSVs either way. A settled term returns by itself the moment its cost moves by 25% and $25 in either direction, marked with what it used to cost, because a term you kept in May that is now burning $300 a week is exactly the one you want to see again.
- Click "Mark week reviewed" when you are done. This is the only thing that moves the date marker, so the next pull starts the day after this batch ends. Undecided rows are fine.
- Wait for the files — there is nothing to run. Within a couple of hours the upload CSVs appear on this page on their own. A background job saves your decisions into the classifier's memory, builds the files, and runs the AI safety audit over what is about to ship. Anything it wants you to know shows up as an orange warning at the top of this page.
- Download the CSVs here and upload or send them to the agency. Each button says what its file is for. Only UPLOAD ones go to Google Ads; read the READ FIRST phrase-negative file line by line before using any of it, since phrase match is broader than exact.
- Click "I uploaded these" on the file strip. This matters: the system only stops re-sending a keyword once someone confirms it actually went up. If a file never gets uploaded, leave it unmarked and those keywords come back around on their own.
The files, and which ones actually get uploaded
_upload.csv— UPLOAD. The new negatives, exact match. This is the main one._moves.csv— UPLOAD. Tier moves. It negates a term in the tier it is in now so it falls through to the tier you chose. Same format, upload it the same way._phrase_negatives.csv— READ FIRST, then decide. Phrase match is broader than exact: one line can block a whole family of searches. It is kept out of the upload file on purpose so it is never uploaded by reflex. Read every line._rejected.csv— nothing to upload. Keywords Google Ads will not accept (too long). Listed so they are not silently dropped.negate-audit-*.csv— read only. The AI's second opinion on what is about to ship. Anything it flags is worth a look before you upload.
Every file column is what Google Ads' bulk editor expects:
Keyword, Keyword Type, Campaign,
Ad Group. Keywords already come wrapped —
[exact] in the upload and moves files, "phrase" in the
phrase file — so nothing needs editing before it goes in.
When a NEW campaign is added to the account
This is the one thing that needs a config change, and skipping it is the single most expensive mistake available here. A campaign nothing claims loses every rule and dumps its whole week into REVIEW — that happened once and cost 7 campaigns and 246 rows of pointless work.
- Copy the campaign's exact name out of Google Ads, including
the tier suffix if it has one (
_HIGH/_MED/_LOW). - Open
bsf_search_term_classifier_config.xlsxand go to the Campaigns tab. - Add a row. Column A is the prefix the config knows the campaign by. Column G ("Account Prefix(es)") is what it is actually called in the account, if that differs. Leave G blank when they are the same.
- Decide which rules it inherits. Negate lists and category terms are scoped by prefix, so a new campaign starts with only the account-wide ones. If it should share another campaign's rules, scope them to a shared parent prefix rather than copying the lists.
- Save the file, then re-run the week
(
python bsf_weekly.py). If you got it right, the orange warning on this page is gone. If it is still there, the name in column A or G does not match the account.
If a campaign is renamed or deleted in Google Ads, do the same thing: the config is keyed on the name, so a rename reads as a brand-new unclaimed campaign.
Where these search terms come from
Nothing is typed in or exported by hand any more.
bsf_weekly.py asks the portal's worker which dates to cover (the day
after the last week you marked reviewed, through yesterday), the worker pulls those
search terms straight from the Google Ads API using credentials only it holds, and
the classifier — the same rulebook spreadsheet as always — labels every
row before pushing the batch to this page. The raw pull is also saved to
1. Raw Keywords, so there is always a file showing exactly what came
back.
What runs by itself, and what still needs you
Two scheduled jobs do the machine work. Friday 8am pulls the week and classifies it, which is what puts a batch on this page. Every couple of hours a second job checks whether you have closed a week that has not been turned into files yet, and does that when you have. Neither one uploads anything to Google Ads.
⚠ Friday is not a guarantee. Both are scheduled tasks on the office laptop and neither can wake it. If the machine is asleep or off at 8am, the pull runs the next time it is switched on. Nothing is lost when that happens — the window always starts the day after the last week you closed and runs to the day before it actually runs, so a late pull simply covers more days. A range wider than a week means it caught up, not that something broke.
They run on the office laptop because the classifier's rulebook, its memory of your past decisions, and the record of what has already been sent are all files that live beside it. Everything you personally do is on this page — deciding, closing the week, downloading, and marking them uploaded — from any machine you can sign in on. The one exception is adding a new campaign, which means editing the config workbook on that laptop.
If a week you closed has produced no files after a few hours, that laptop was probably asleep. It catches up on its own the next time it runs; nothing is lost and nothing needs re-doing.
Things that are supposed to happen
- An orange warning above the table. These come from both halves of the run and all of them mean "look before you upload": a campaign classified with none of its own rules, a tier move pointing at a campaign nobody has seen, terms that could not be placed, phrase negatives awaiting a read, or something the AI audit flagged as a possible real buyer.
- A wider date range than a week means a review was skipped. Nothing was lost; it is catching up.
- "Nothing new to pull yet" means exactly that — not a failure.
| Your call | Search term | Impr | Clicks | Cost | Classifier |
|---|