api.trendgoblin.com

The only trend API with opinions.

Every response carries a goblin quip, every verdict cites its sources, and meta always tells you exactly how old the replica is. Your agents are welcome here — an MCP shim is on the roadmap.

Quickstart

curl https://api.trendgoblin.com/v1/trends?verdict=qualified&limit=5

curl https://api.trendgoblin.com/v1/keywords?q=home+sauna&max_competition=0.3

curl https://api.trendgoblin.com/v1/kill-wall

Endpoints

RouteWhat it answersFree tier
GET /v1/summaryHow big is the hoard — trends, kills, keywords, adsyes
GET /v1/trendsBrowse verdicts; filter ?verdict=&lane=&limit=100 rows
GET /v1/trends/:idOne trend + its SERP history7-day history
GET /v1/keywordsVolume/CPC/competition; ?q=&min_cpc=&max_competition=&min_volume= — an unparseable number is a loud 400, never a silently dropped filter100 rows
GET /v1/searchUnified search over trend titles + keywords; ?q=. On a miss, returns the closest tracked titles — no naked negatives25 rows each — every tier
GET /v1/kill-wallTrends we told people to skip, newest firstyes, all of it
GET /v1/proven-offersAdvertisers still paying to run the same ads months later, with the price band and newest listings from their storefront; ?min_days=&limit=&offset=. Every ad carries its Meta Ad Library link. Not a verdict — see the caveat on every response100 rows
GET /v1/momentumSplits the already-exploding half by whether the move is still running; ?class=confirmed|yearly_only|quarter_only and ?level=trend|keyword. Every class ships its backtested repeat rate, its lift over the base rate, and the validation population — see below. level=keyword returns the raw signal with no verdict, evidence or kill test attached, and says so in meta.scope100 rows
GET /v1/shortlistThe trends that clear every bar we can measure, with the funnel that produced them; ?min_volume=&min_cpc=&max_difficulty=. A sequence of filters, not a score100 rows
GET /v1/collapsingDemand falling hard enough to be worth avoiding, each with its curve100 rows
GET /v1/founding-seatsHow many of the 100 founding seats are actually taken, counted from issued keysyes
GET /v1/lanesPer-lane counts plus the lane × next-action matrix, over the whole index including the trends we have not labelled. Every number the dashboard shows about filtering comes from here rather than being typed into the page.free

Verdict legend

Qualified
Demand, buyer and margin gates all cleared. Requires evidence we cannot collect without an owner, so this bucket is usually empty — and we say so rather than filling it.
Early signal
Buyers look plausible but are not yet confirmed.
Watch
Traffic is real and moving; nobody has shown us money yet. Most of the board sits here.
Won't pay
Killed before it could eat a test budget. The reason is on the card.
Unknown
On the board, not yet gated. Not a judgement — an admission.

Kill test. The cheapest thing that would prove an idea wrong — stated as a cost and a number of hours, e.g. $40 · 3h. It means "spend this to falsify it", not "delete this".

Snapshot. One SERP observation of one keyword on one date. N snapshots is how many times we have looked, not how many results there are.

Paging

?limit= caps rows per request — 100 free, 500 with a key. ?offset= pages through the full result set and is free: the whole index is reachable without a key. It was gated once; withholding rows turned out to be the laziest gate we could have picked, so it is gone. Free offsets are capped at 5,000 rows in, past which you want the CSV export. List responses carry total and has_more so you never have to guess whether you have reached the end.

Authentication

Send X-TrendGoblin-Key. No key is the free tier. No account either — these endpoints do not know what an account is. A key we do not recognise, or one that has been revoked, is a 401 — never a quiet downgrade to free data, because a wrong key returning thin results with a 200 is indistinguishable from the free tier working correctly.

Rate limits: 60 requests/minute without a key (per IP), 600/minute with one (per key), so one customer cannot exhaust another. Over the limit is a 429 in the same JSON envelope as everything else.

Momentum, and what we could not do

We went looking for a signal that flags a topic before it reads as exploding. We did not find one, and this section exists to say so rather than to sell the attempt.

Method: every priced keyword carries its own monthly search-volume series. We cut each series at a point in the past, computed candidate signals from only the months before the cut, then observed what the months after the cut actually did. Nothing is forecast — the future is observed. Held out at 3, 6 and 12 months across 5,185 non-overlapping cut points from 516 keywords with 85–104 months of history each.

SignalKept climbing over the next 6movs base rate
Base rate (any trend)6.4%—
Up 100%+ on the year (what an explosion product ranks on)23.4%3.7x
Up on the year AND last quarter 2x the nine months before it39.1%6.1x
Up on the year, quarter has not followed18.0%2.8x
Quarter broke, year not yet up 100% (the "early" idea)6.0%0.94x

That last row is the negative result. A quarter breaking away while the year is still quiet predicted explosions at 0.94x the base rate — worse than picking at random. So there is no early-warning class in this product, and quarter_only ships with a null rate and a warning attached rather than a claim.

What the quarter break does do is split the already-exploding list roughly in half by whether the move is still running: 39% against 18%. A yearly percentage cannot tell those apart, because it reads the same for both.

Split-half. Every threshold above — the 2x, the +100%, the conjunction itself — was chosen after seeing results on all 516 validation keywords, which is in-sample selection. Splitting those keywords into two halves by hash and re-running gives 33.8% and 44.3% (lift 5.62x and 6.53x), against 20.5% and 26.1% for the year-only signal on the same halves. The effect survives the split, so the honest figure is the range 34–44% rather than the point estimate.

Caveats that travel with the number. The 516 validation keywords are 1% of the corpus and were not sampled to represent it; the signal is applied to keywords it was not validated on. Observations within one keyword are autocorrelated, though precision averaged per keyword (38.1%) tracks the raw figure. And a backtested rate describes a population, not an individual keyword — 39% of a group repeated, which is not a 39% chance for the row you are looking at.

Honesty contract

Paid

Goblin Pro is $29/mo — first 100 subscribers keep $19/mo, locked forever. Full history, higher limits, unlimited tracked trends, and CSV export at 500 rows a call instead of 100. The CSV format itself is free — only the row cap is tiered. Key goes in the X-TrendGoblin-Key header. Billing switches on at launch; the price is on this page. This API needs neither an account nor a key. The dashboard needs a free account, and that is the only thing here behind a signup.