This project first came to me for an audit. A branded footwear online store on Khoroshop. The audit showed that half of the conversions in the account were fake. The ads were learning from garbage, and the owner was looking at numbers that did not exist in reality.
After the audit, the client ordered a turnkey setup — the light package. The budget is small, so the task was not to “go big” but to make every hryvnia go into learning from real sales.
Contents
- What it looked like at the start
- Offline conversions without a CRM
- Two new goals: actual purchase and actual margin
- A nuance the owner needs to know: the click date
- Wiping three months of fake data
- Product feed: titles and attributes
- One Performance Max Feed Only campaign
- 19,540 excluded placements
- Search terms
- What’s next
- FAQ
What it looked like at the start
At the start, the account had three problems:
- about 50% of “purchase” conversions were fake;
- the ads were showing on what were probably children’s YouTube channels. Most likely, that is where the fake orders came from: kids clicked and checked out. It is impossible to verify this 100%, but the picture looks very similar;
- the algorithm was learning from exactly these “dirty purchases”.
So the problem was not in the bids or the campaigns. The problem was in the data everything was running on.
Offline conversions without a CRM
First and most important — I gave the ads real sales instead of “purchases” from the website.
The store has no CRM system — orders live in the Khoroshop admin panel. So I built the client a simple web interface for sending sales to Google Ads. The manager enters:
- the gclid — the ad click ID;
- revenue from the sale;
- margin — how many hryvnias of gross profit the sale brought;
- transaction ID — the order number from the Khoroshop admin. This field is optional: if it is left empty, the system inserts a random five-digit number, so duplicates are almost impossible.
Orders can be entered right after confirmation, not after the deal is fully closed. Customers here make a prepayment, and according to the owner, if a person has confirmed the order, they almost certainly pick it up. So there is no point in waiting until the parcel is received: the sooner a conversion reaches Google Ads, the faster the algorithm learns.
Once a day, between 2 and 3 a.m., the data is automatically uploaded to Google Ads through Data Manager.
Google Ads case study · End-to-end analyticsGoogle Ads Offline Conversions Without a CRM: Ctrl+C, Ctrl+V — and Your Ads Learn from Real SalesHow to send qualified leads, real sales and margin to Google Ads without a CRM: a simple web interface, gclid and a daily upload.
Two new goals: actual purchase and actual margin
For this setup, I configured two goals. Their names say “CRM”, but in essence these are sales the manager enters manually from the admin panel:
- “Actual purchase CRM” — revenue from real sales;
- “Actual margin CRM” — margin from the same sales.
The campaign is now optimizing for actual purchases. The owner says his margin is more or less fixed, without a spread like “20% here, 70% there”. If there is a spread after all, the campaign can be switched to actual margin. Then the system will look for combinations of audiences and products that bring the highest margin, not the highest revenue.
I no longer use the old “purchase” conversion in the account. Those are dirty purchases.
A nuance the owner needs to know: the click date
This method of sending offline conversions does not work the way owners are used to. The usual logic: a conversion came in yesterday, so it was counted yesterday. Here it is different. In the standard metrics — “Conversions”, “Conversion value” — a sale is recorded not on the day of the order, but on the day of the ad click.
That is why these metrics can only be analyzed over a longer period. To assess things “here and now”, I added other columns to the account and to the main dashboard:
- Conversions (by conv. time) — conversions by conversion date;
- Conv. value (by conv. time) — value by conversion date;
- Value / conv. (by conv. time) — average order value: value divided by the number of conversions by conversion date.
The data arrives with a one-day delay: the conversion is uploaded at 2 a.m. But analyzing ads day by day makes no sense on any project anyway. Look at a week at least — then you see the real numbers.
Wiping three months of fake data
Even though the goal is new and learning effectively starts from zero, I played it safe. Using data exclusions in the bidding settings, I removed conversions for the last three months so the strategy would not take into account the history with 50% fakes.
Three months is enough: Google’s strategies do not use data older than 90 days anyway.
Product feed: titles and attributes
The next block is fine-tuning the product feed. Through a supplemental feed I:
- completely rewrote the titles the way they should look;
- added item_group_id. Sneakers of one model in five sizes are five SKUs. Without item_group_id, Google treats them as different products and learns from each one separately. With it, the system understands that it is one product in different sizes and learns from the group;
- added product_detail, mpn, size and size system, gender, age group, plus color and material where possible.
Why do this? So the system understands more clearly what the product is and matches it better to search queries. Before, it was roughly “Asics Patriot sneakers”, and now the product has a whole set of characteristics.
It is not a game changer. But when there is a chance to do something that could potentially improve the result, you should do it.
The feed is static for now, so the client received instructions on how to update it when new products appear.
One Performance Max Feed Only campaign
There is only one campaign for now, because the budget does not allow much room. It is built on the Feed Only principle, meaning it works only with the feed.
This is no guarantee that Performance Max will not go into other networks looking for an audience. But I did everything possible to keep it from going there.
How it is segmented:
- two pairs of asset groups — for men’s and women’s footwear. This is mostly for convenience: it makes the initial analysis faster than expanding the products in each group;
- in each pair, one group is without signals and the other with search themes. An important point: search themes are not targeting. They are a signal that gives the system a better understanding of the audience;
- within a group, products are segmented by brand. Later, once there are statistics, weak brands can be turned off.
One more thing. I kept only the Ukrainian feed. In the audit, the client saw for himself that the Ukrainian feed performs better than the Russian one. When the budget is small, you need to narrow down as much as possible, not expand so much that the system collects statistics for ten years.
Only one thing is needed from the client here: turning off seasonal products in the Khoroshop admin. If it is winter footwear season now, summer shoes might still be bought, but it is unlikely. They should not eat the budget.
19,540 excluded placements
Next, I cleaned up placements: I added an exclusion list of just over 19,000 entries — mostly children’s YouTube channels. Cartoons, nursery rhymes and everything along those lines.
That is exactly where the ads used to show, and most likely that is where the fake orders came from. Even if not, for a store selling adult branded footwear it is definitely not superfluous.
Search terms
I reviewed the search terms. Honestly, there was very little irrelevant traffic. But what there was, I removed:
- children’s footwear — the store does not sell it;
- “from the manufacturer” queries — searches for footwear from specific Ukrainian factories. By all appearances, these are competitors’ brands.
One cluster I deliberately did not exclude — weightlifting shoes, special footwear for weightlifting. I did not find them on the site, but it is the client’s call: if they definitely are not sold, the cluster should be added to exclusions.
What’s next
During the first week, I am watching that the campaign runs normally and does not wander into YouTube. Once statistics accumulate, the first conclusions will appear: which brands work, which do not, and whether it is worth switching to margin optimization.
I will add the results separately once there is enough data. Analyzing ads a week after launch is exactly what I warn clients against.
01 — LaunchTurnkey Google Ads launchOne-time setup + one week of support. Includes basic tracking setup, Google Merchant Center setup and launch (for online stores), Google Ads setup and launch.
Where to find me
Message me on Telegram or by email — I respond quickly. Telegram channel and YouTube are for those who want to see real cases before reaching out and understand my approach.