
My API tells your agent when it got a Cloudflare page instead of the actual content. Zero paying customers. Roast it.
We've been building EnConvert (https://enconvert.com) for 7 months. It's one ingestion layer for everything an agent has to read that isn't already in its context. A URL, a PDF, a spreadsheet, a whole site. Back as markdown, JSON, PDF or a screenshot. It's an MCP server first so it drops into Claude Code, Cursor or Windsurf with one command, and there's a REST API, a CLI and an n8n node if you're not working inside an agent client. We are actively working on integrating EnConvert with more and more platforms like Make.com, Zapier, LangChain and others.
The pitch is that it's one layer for both halves. Firecrawl, Jina Reader, ScrapingBee and Apify read web pages. CloudConvert converts files. An agent needs both, usually in the same run, because half of what it has to open is a PDF someone attached and the other half is a page behind a cookie wall. Right now that's two vendors, two SDKs and two meters. We're one key and one meter, 45+ formats and the web.
The second thing is that every read comes back scored 0 to 1, with a named list of what got deducted and a warning in plain English. Hit a Cloudflare interstitial and you get `anti_bot_challenge` and "page appears blocked by anti-bot protection." Same for a WAF block, a login wall, a 404, an empty body, an SPA shell that never hydrated. 92% catch rate and 4% false alarms on our 50-page labeled corpus, and we publish the misses. So when your crawler pulls 400 pages and 60 of them were challenge screens, you know which 60 before they turn into chunks in your index. Everything else I've used hands that back with a 200 and lets the agent believe it.
Output quality is the part I'd defend hardest. Markdown, PDF and screenshots, all three, and we push on it constantly. Most of that work is unglamorous. Last week I found out platform.claude.com's `<main>` element is a nav shell, so main-content extraction had been returning the sidebar and calling it the article. Figma pages were crashing it outright because I was removing DOM nodes while iterating over them. Both fixed.
Where we actually are: 31 free signups, 16 of those made more than one call, zero paying customers, and over 2500 successful conversions through our free playground (https://www.enconvert.com/playground). Free tier is 500 operations a month, no card. Then $29 for 3,000 operations, $99 for 15,000, $299 for 50,000. One op is one read, so a page that takes 30 seconds to render costs the same as one that takes two. Two of us, bootstrapped, no investors. For distribution we've tried a few LinkedIn posts and SEO mainly (documentation and website in 5 languages, and other SEO stuff). We are still actively engrossed in development and not have had time to focus on distribution much.
I know how the surface area looks. Seven endpoints, an MCP server, a REST API, a CLI, an n8n node, a browser extension, 10 SDKs, and 8 WordPress plugins still live from when this was only a file converter, which is also where the name came from. We built the surfaces before anyone was asking for them.
The limit I'd want to know about if I were you: /v2/ingest renders pages but doesn't gate on the score yet, so a blocked page can still get into a RAG corpus unflagged. That's the next thing we're fixing.
Two things I want roasted.
The positioning. The homepage says "The web lies to your agent. EnConvert doesn't." Open it for ten seconds, close the tab, then tell me what you thought it did and who it was for. I've read it too many times to judge it.
And whether the wedge holds. Is "one layer for files and the web, and it tells you when it got blocked" a reason to move, or is it two features that Firecrawl and CloudConvert each ship in a sprint the moment a customer asks twice? If it's the second one, tell me what the real wedge should be.