Your model already does
the other half of SEO.
It audits your site, finds the gaps, writes the brief and plans the links. Then it stops, because the next step is buying something and there was never anything to call. This is the thing to call.
connect
One command, then ask it to plan a campaign.
# Claude Code, Cursor, or any MCP host
claude mcp add --transport http placement-api \
https://api.placementapi.com/mcp \
--header "Authorization: Bearer $PLACEMENT_KEY"
# In Claude or ChatGPT:
# Settings -> Connectors -> Add custom connector
# URL https://api.placementapi.com/mcp
# Header Authorization: Bearer <your key>Hosted, not an npx package: nothing to install, nothing to pin, and we can fix a bug for everyone at once. Prefer code? The typed client is placementapi on npm.
the tools
20 tools. Five of them can spend money.
A key you paste into an MCP config lives inside a chat session for as long as that session does. A key that can only search is a very different thing to leave there than one that can buy links, so ordering is a separate scope. On a read-only key the buying tools are not refused, they are never listed.
search_placementsreadEvery supplier at once, deduplicated by domain, at the price you will actually pay.plan_linksreadA brief becomes a costed basket, spread across domains, with a why for every line, at a price held for 4 hours.compare_domainreadEvery listing for one domain, cheapest first, with the spread and our verdict on its authority.check_balancereadCredits, spend caps, and what has cleared.list_ordersreadDelivery state, which orders can still be cancelled, and which are waiting on an article.campaign_statusreadWhat this account has already bought for a page: domains, spend, anchor mix. Nothing bought twice.target_profilereadThe backlink profile of the page you are buying for, and how much of it we sell.gap_mapreadDomains your competitors have that you do not, priced and held.ranking_scenarioreadWhat closing a keyword's gap could be worth, with measured, published and assumed figures kept apart and labelled.keyword_winnersreadWho ranks for a keyword, who links to them, and which of those we carry.search_console_statusreadWhether this buyer has connected Google Search Console, and how far the nightly pull has got.connect_search_consolereadA consent link to connect Search Console, read-only. Their rows stay theirs: never pooled, never published, deleted on disconnect.search_console_opportunitiesreadThe buyer's own pages at positions 5 to 20 with the queries behind them and their momentum: where a link has something to move.place_orderorderBuys a placement at the held price. Charges immediately, inside the account's spend caps.submit_contentorderSends the article for an order, checked against the publisher's spec before it goes anywhere.write_it_for_meorderHas the article drafted with the buyer's own model and stored on the order for approval.order_outcomereadEverything observed since a placement: the link still standing, rank movement, confidence. Observed, never caused.standing_ordersreadThe account's standing orders: so many links a month for a page, and how each last run went.create_standing_orderorderSet up links that keep arriving on a cadence and budget; auto placement stays a dashboard switch.cancel_orderorderFull refund until the order reaches a supplier.the handbrake
Autonomy you can leave running.
An agent optimising for authority per dollar will happily buy fifty exact-match-anchor links to one page in a week. Every rail below is enforced server-side, because a markdown instruction is advice and a database constraint is a guarantee.
Caps it cannot argue past
Per-order and per-day limits are enforced in the same atomic statement as the charge. They are not in a prompt, so no amount of reasoning gets around them.
A retry never charges twice
Agents retry on any network hiccup, and a retry without a key is indistinguishable from a second purchase. We refuse it rather than double-charge you.
Your agent is warned about anchors
The ordering tool tells the model that anchor text is a distribution, not a string: many links on one exact-match anchor get devalued rather than counted, so the budget is spent and the links do nothing. Guidance, not a database constraint.
Fakes are out by default
Plans exclude domains whose authority is not backed by search traffic unless you ask for them, so a model cannot quietly buy a campaign of them while hitting its DR target.
Quoted prices are held
A plan approved at 9am is charged at the price it was approved at. A quote binds for 4 hours, so the catalogue moving underneath cannot turn a yes into a different invoice.
Cancel until the morning
Orders go to suppliers in one batch each day. Until then anything can be pulled back in full, which is the window where a mistake is still free.
after delivery
It keeps watching, and says observed, never caused.
Is the link still there
Delivered links are re-checked on a schedule. One that disappears inside its guarantee becomes a claim, not a shrug.
Did the page move
Rank on the page's keywords is observed at checkpoints after delivery and reported with confidence, across buyers where three or more bought the same site.
Your own numbers, if you connect them
With Search Console connected, the buyer's real impressions, clicks and positions replace published curves in every answer, and never leave their account.
Give your agent something to call.
Free key, read-only by default, 215,280 measured domains to search.