Placement API
Buy SEO link placements across every marketplace from one API or MCP server.
Named, inspectable domains with live prices, independent verification, a survival record for every publisher we have bought from, and one invoice — paid with prepaid credits.
This repository holds the TypeScript client (sdk/, published to npm as placementapi) and the MCP registry manifest (server.json). The service itself is not open source.
Connect the MCP server
claude mcp add --transport http placement-api https://api.placementapi.com/mcp \
--header "Authorization: Bearer $PLACEMENT_KEY"
{ "mcpServers": { "placement_api": { "url": "https://api.placementapi.com/mcp",
"headers": { "Authorization": "Bearer pk_live_…" } } } }
Claude.ai / ChatGPT: Settings → Connectors → add custom connector with the URL above and the Authorization header.
Get a key at https://app.placementapi.com/dashboard. A read key can search, plan and compare; an order key can spend credits.
| Tool | What it does |
|---|
search_placements | Search ~550k priced placements deduplicated by domain, with verification, score and price plausibility on every row |
plan_links | A brief in (links, topic, DR, budget, strategy) → a costed plan of named domains, each with why, held at price for four hours |
compare_domain | Everything about one publisher: listings and spread, verification, web-graph, survival, outcomes, Placement Score, market reference |
target_profile / gap_map | Your page's backlink profile and the competitor links you can reproducibly buy, priced |
keyword_winners | What the sites that rank for a keyword look like, and what they buy |
place_order · submit_content · write_it_for_me | Order at the held price; supply the article, let the publisher write it, or have it written |
list_orders · campaign_status · order_outcome | Fulfilment, live checks and observed rank movement (observed, never attributed) |
standing_orders · create_standing_order | Recurring plans; auto-placement can only be enabled from the dashboard |
check_balance · cancel_order | |
Use the SDK
import { PlacementApi } from "placementapi";
const api = new PlacementApi({ apiKey: process.env.PLACEMENT_KEY! });
const quote = await api.quote({ links: 5, topic: "finance", dr_min: 50, strategy: "safest" });
for (const l of quote.lines) console.log(l.domain, l.price_credits, l.verification, l.why.join(" · "));
See sdk/README.md.
Things worth knowing
- Credits are US cents. Prices on a quote are held for four hours; order with the
quote_id to pay the held price.
verification says whether a domain's authority is real: ok, suspect (high link authority with no organic footprint — what a link farm looks like) or unverified. quality_reasons names which of five tests fired. Method: https://placementapi.com/research/quality-methodology
- Suppliers are never identified. You see counts and spreads, never who. That is a product rule, not a gap.
why[] on every line is the factual basis for the pick, in sentences an agent can repeat.
Support: hello@placementapi.com · Terms: https://placementapi.com/terms