Scaling a creative because it gets clicks?Check the cost per purchase and fatigue.
Basketly groups ads that reuse the same video or image into creatives. Each creative gets a cost per purchase and ROAS from Meta’s report, next to hook rate, hold rate and a fatigue signal.
Example data
Clicks look good. You pay for purchases.
The most clicks and video plays do not mean the most sales. What counts is the cost per purchase and how much a creative brings back for every unit of spend.
You scale the wrong creative
The creative with the highest CTR is not always the one with the cheapest purchase. Without cost per purchase and ROAS on every creative, budget follows clicks instead of sales.
You don’t know why the winner won
Creative number 7 sells, but what in it works: the hook, the creator, the offer? Without a label on each creative, every new batch is a guess.
Fatigue shows up too late
The cost per purchase creeps up week after week, and in a 400-row table nobody spots it until the budget is gone.
Example data
Everything about a creative on one card
Instead of hundreds of ad rows you see creatives: one card per video or image, with purchases, costs and video data side by side.
Cost per purchase and ROAS for every creative
Spend, purchases and their value from Meta’s report. Cost per purchase and ROAS are counted within one currency only, and a creative without purchases shows “—”, never 0.
One video, several ads, one creative
Ads that reuse the same video or image are counted together, even across campaigns and ad sets. The details list every ad on its own.
Hook rate, hold rate and CTR
Hook rate is 3-second plays divided by impressions, hold rate is ThruPlays divided by 3-second plays, and CTR is link clicks divided by impressions.
Which hook, creator and format wins
Tag creatives by hook, creator and offer; the format is detected from Meta. The breakdown adds up creatives with the same tag, lowest cost per purchase first.
Week by week, with a fatigue signal
“Possible fatigue” shows when, over the last 3 weeks, the creative spent at least 100 a week and its cost per purchase rose by at least 30% twice in a row. “Hook rate drop” means two drops in a row of at least 20%. Both are signals to check, not proof of the cause.
Compare 2 to 4 creatives
The creatives you pick side by side, the same metrics in rows. The best result in each row is marked.
- Filters: period, ad account, campaign, format, tag
- Card or table view
- CSV export
- Hide paused and inactive ads
Example data
Material and copy, each on its own
A creative card tells you what sold. Clusters, Copy and Matrix split that result into the material and the ad copy, and show the combinations nobody has tried yet.
Clusters: every material with every copy
Materials in columns, ad copies in rows. A cell adds up the ads that combine the two, and its colour grades them by the metric you pick, from best to weakest. An empty cell is a combination nobody tested in the selected period.
- Uploads of the same video or image and its versions for different audiences count as one material
- The best combinations sit top left, by the metric you choose
- A minimum spend: cells below it get no grade
- Up to 24 materials and 24 copies with the highest spend
An empty cell as a paused ad
Click an untested combination and Basketly prepares an ad: the material, Page, button and destination from this material’s ad that spent the most in the period, with the copy from the chosen row as the primary text. The ad goes into that ad’s ad set and is created in Meta as paused. It spends nothing until you switch it on in Ads Manager.
- Everything Basketly creates in Meta starts its name with [basketly.io], so it is easy to find and tell apart
- Until the ad starts spending, its cell shows “Draft in Meta” with a link to Ads Manager
- Created by an organisation owner or admin, up to 10 new ads an hour
Copy: which text works whatever the material
Every primary text with the results of all the ads it ran in, and the number of materials it ran with: the wider, the firmer the result. Copy features are compared by their share of spend against their share of Meta purchases, and AI tags read the hook, offer and tone from the text. Only the ad text goes to the AI model, never customer data.
Matrix: spend and purchases on one chart
Every creative is a dot. The diagonal is the average cost per purchase according to Meta, the vertical line is the median spend. Both axes use a square-root scale, so one big creative does not squeeze the rest into a corner.
A dynamic creative gets an ad set copy
A dynamic creative’s texts are set in its ad set, so the new text goes into a paused copy of the ad set, with the same settings and without its ads, holding one ad: the same assets, headlines and destination.
Hide paused and inactive
One switch keeps only the ads that are active right now in every list, total, cluster and comparison. Your browser remembers it.
Example data
From connecting Meta to your first creatives
No tagging in Ads Manager and no changes to your campaigns. All it takes is an ad account Meta reports purchases for.
- 1
Connect your Meta ad account
Log in with Meta and pick an ad account. For the analysis Basketly only reads ad data (the ads_read permission). It writes to Meta only when you create a new combination in Clusters yourself.
- 2
Send purchases to Meta
Meta credits ads with the purchases it knows about: from the Pixel and from the Conversions API. Basketly sends paid shop orders from the server, so purchases do not depend on the browser alone.
- 3
Creatives add up on their own
We pull spend, purchases, impressions and video data from Meta every hour, going 90 days back on the first sync. Ads with the same video or image merge into one creative.
How we count
The same rules as the campaign report, so the numbers match across pages.
The ranking, matrix, clusters and comparison cover Meta ads (Facebook and Instagram); Google Ads, Microsoft Ads, TikTok, Pinterest and ChatGPT Ads get their own tabs in Creatives with a list of ads. Purchases and ROAS come from the platforms’ reports, meaning their attribution: they show which creatives a platform credited with sales, but they do not prove that the creative caused the result.
- The main metric is cost per purchase as Meta reports it
- One purchase type per row (purchases across channels, otherwise from the Pixel and the Conversions API), never a sum of several
- ROAS only within one ad account currency
- A cost is shown only when there is something to divide by
- Video data is for videos only: images and photo carousels get CTR and costs
We pull spend, impressions, link clicks, video data, and purchases with their value from the Meta Marketing API with the ads_read permission, for the ad accounts you connect.
In part. When another channel has ad-level figures, Creatives get its tab: Google Ads ads (with a separate table of assets: headlines, descriptions, images, YouTube videos), Microsoft Ads, TikTok (with video covers), Pinterest and ChatGPT Ads (chat card title and text, no image), with spend, CTR, conversions and ROAS as the platform reports them plus Basketly orders. The ranking with fatigue, the matrix, clusters and comparison work for Meta only. Conversions of different channels are never added up.
Over the last 3 weeks the creative spent at least 100 a week in the account currency, and its cost per purchase rose by at least 30% twice in a row. It is a signal to take a look. The cost may also have risen because of seasonality, a different audience or a budget change.
Meta counts the purchases it attributes to its ads, with its own attribution. The shop counts every order, including search and newsletter ones. That is why creative purchases are never added to shop revenue; the whole picture is MER in the campaign report.
It is the purchase value according to Meta divided by the spend on the creative, in the ad account’s currency. When a creative spends in several currencies, neither cost nor ROAS is shown.
We never change existing campaigns, ad sets or ads. The analysis only reads data from Meta, and tags are stored on our side. The one write to Meta is a new ad from Clusters: an organisation owner or admin creates it with one click, always paused, with [basketly.io] at the start of its name. This needs a Meta login with the ad management permission and access to the ad’s Page.
Clusters add up the ads in the selected period and filters. An empty cell means no ad combined that material with that copy in this period. The combination may have run before, outside the selected period.
A new creative and ad in the ad set of this material’s ad that spent the most in the period: the same material, Page, button and destination, with the chosen copy as the primary text. The ad is paused, so it spends nothing until you switch it on in Ads Manager, and Meta reviews it before it runs. For a dynamic creative a paused ad set copy is created as well. The limit is 10 new ads an hour.
Only the ad’s primary text. Customer and order data never leave Basketly. The model picks the hook, offer and tone from a fixed list of values, and tags are read in the background.
Related features
- Sales reportOne sentence on how the shop is doing, the six key figures and conclusions with a next step — and tabs below, each answering one question. Every number with its truth level: the shop, a platform or the last click.See details
- All channelsMeta, Google Ads, Microsoft Ads, TikTok, Pinterest and ChatGPT Ads next to the shop’s sales: total spend, blended MER, each channel on its own campaigns and three truth levels that never mix.See details
- Campaign reportingCampaigns of Meta, Google Ads, Microsoft Ads, TikTok, Pinterest and ChatGPT Ads, each platform on its own figures and attribution window, next to the shop’s orders and revenue, with products in catalogue ads.See details
- Orders and buyersEvery shop order with its lines and state, revenue, average basket, new and returning buyers, and 24 months of history.See details
- Product feedsYour shop’s feed fixed automatically and by your rules, every product diagnosed against Google Merchant Center and Meta catalogue requirements, served at its own address.See details
- ConversionsShop purchases sent server-side to Meta and seven more platforms, and a day-by-day balance: how many orders, how many purchases accepted and where something got lost.See details
Get started in under 5 minutes
Connect your shop and Meta and see how many purchases really arrive.
- Free up to 100 orders a month
- No developer needed
- Purchase balance and self-check