quickstart is genuinely 3 requests: health check, POST /manifest with a url, pull one action by id. docs: https://t.co/AOiSVK5IZJ. would genuinely love feedback if anything's unclear.
the web really wasn't built for agents. broken a11y trees on most sites, client-side rendering that makes state unpredictable, anti-bot that flags a well-behaved agent the same as an attacker. that gap is the whole company, honestly.
typed errors matter more than people think for agent code specifically — an agent that catches a generic exception can't tell "bad key" from "rate limited" from "server's down," and ends up retrying the wrong one forever.
I kept watching agents fail on the exact same button, differently, every time. sometimes a broken selector. sometimes a screenshot agent missing by 6 pixels. sometimes just... freezing, no error, because nothing told it what was clickable. that's not an agent problem. that's a "the web wasn't built for this reader" problem.
if you signed up for the free tier and it's just been sitting there — 50 calls is genuinely enough to wire up a real prototype against 5-10 pages. go actually try it this week.
Spent today chasing a bug where our agent API kept timing out on big pages like LinkedIn's feed – turned out we were sending every element on the page to the LLM, relevant or not. Shipped a fix: add the agents goal to the api call, it filters first. 155s → ~9s on the worst case I tested. manifest-api 0.7.0 is live on PyPI 🚀
full pricing table, because I'd rather overshare than have anyone find out mid-integration:
free $0 / 50 calls
starter $29 / 1k calls, $0.08 over
pro $79 / 5k calls, $0.05 over
enterprise: email me
where this is going long-term: a tiny JS snippet site owners can drop in, like an analytics tag, so they can hand-annotate their own semantic layer instead of us inferring it. llms.txt but it's alive.
get asked "how's this different from firecrawl" a lot. firecrawl tells you what's on the page. we tell you what you can do with it. genuinely different problem, most people conflate them until they hit the wall.
the honest competitive landscape as I see it: browserbase/playwright mcp = session layer, no semantic layer. firecrawl/jina = semantic-ish, but for reading not doing. nobody's really doing both yet. that's the bet.
not trying to solve "understand the entire internet" on day one. trying to solve "this agent needs these 15 sites to work every single time." much more tractable problem, and the one people actually have right now.
css locators are a fallback, not the plan. role + name first, always — they're the difference between "this survives a redesign" and "this breaks next sprint."
pricing, since people keep asking in DMs: free is $0/50 calls, starter's $29 for 1k, pro's $79 for 5k. cache hits are free against the limit either way. start free: https://t.co/mpxb45Ujcn
added `blocked_actions()` today — pass in what your agent's already done, get back what's still gated on something else. small feature, saves a lot of wasted calls attempting things that were never going to fire.
most agents hit the exact same URL 10+ times in one session (checking state, re-checking state, checking again). caching that by default was an easy call — cache hits don't touch your limit at all.
wrote the contact-form extraction logic this week thinking it'd be trivial. it was not. "message" vs "your message" vs a placeholder that says one thing and a label that says another — agents get this wrong constantly.
checkout pages are where agents go to die. "place order" button, disabled, zero explanation why.
turns out it's almost always gated on a step you can't see from the DOM alone unless you know to look for it. now it's just in the manifest: requires: [shipping_confirmed].