<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: rtsubber</title>
    <description>The latest articles on DEV Community by rtsubber (@rtsubber).</description>
    <link>https://dev.to/rtsubber</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3933975%2F20f23e9e-fe8e-4814-a122-a05a6698c1cb.png</url>
      <title>DEV Community: rtsubber</title>
      <link>https://dev.to/rtsubber</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rtsubber"/>
    <language>en</language>
    <item>
      <title>I Built an API That Lets AI Agents See the Web Like Humans Do</title>
      <dc:creator>rtsubber</dc:creator>
      <pubDate>Fri, 15 May 2026 22:54:47 +0000</pubDate>
      <link>https://dev.to/rtsubber/i-built-an-api-that-lets-ai-agents-see-the-web-like-humans-do-5jo</link>
      <guid>https://dev.to/rtsubber/i-built-an-api-that-lets-ai-agents-see-the-web-like-humans-do-5jo</guid>
      <description>&lt;p&gt;AI agents are powerful — but they're blind.&lt;/p&gt;

&lt;p&gt;When an LLM tries to scrape a website, it gets blocked. Cloudflare, Datadome, PerimeterX — they all detect bots and serve challenge pages. Even when they don't, the agent only sees raw HTML. No JavaScript rendering. No visual context. No way to verify what's actually on the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local-Eye fixes that.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Local-Eye?
&lt;/h2&gt;

&lt;p&gt;Local-Eye is an API that gives AI agents three things they've never had together:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Residential IP Access
&lt;/h3&gt;

&lt;p&gt;Every request routes through a real residential IP address. No datacenter blocks, no CAPTCHAs, no "Access Denied" pages. Your agent sees what a human sees.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.localeye.co/v1/verify-web-presence &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: your_key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://www.walmart.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns clean text, HTTP status, bot-detection check, and response time — from a residential IP that won't get blocked.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. GPU-Rendered Screenshots
&lt;/h3&gt;

&lt;p&gt;Raw HTML is useless when pages need JavaScript. Local-Eye renders pages on an NVIDIA RTX 3090 using Playwright — real Chromium, real GPU, real pixels. Your agent doesn't just read the page. It &lt;em&gt;sees&lt;/em&gt; it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.localeye.co/v1/visual-verify &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: your_key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://www.walmart.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns a screenshot (PNG), extracted text, page title, and viewport dimensions. Perfect for visual verification, comparison, or just confirming a page loaded correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Phone Verification
&lt;/h3&gt;

&lt;p&gt;Sometimes you need to ask a real human. Local-Eye can call any business phone number and ask a question — "Are you open right now?" "Do you have the O2 sensor in stock?" — and return a transcribed answer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.localeye.co/v1/phone-verify &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-API-Key: your_key"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"business_phone": "+15125551234", "question": "Are you open right now?"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uses real phone calls via Twilio with AI-powered transcription. Your agent gets a definitive answer from the real world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I run a digital marketing agency. My AI agents needed to verify business listings, check competitor websites, and confirm business hours. Every scraping tool got blocked. Headless browsers were slow and expensive. And there was no way to verify information by actually calling a business.&lt;/p&gt;

&lt;p&gt;So I built what I needed — and opened it up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Free tier:&lt;/strong&gt; 5 requests/day. No credit card required. Just sign up and start building.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Calls&lt;/th&gt;
&lt;th&gt;Includes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;5/day&lt;/td&gt;
&lt;td&gt;Text fetch only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;$29/mo&lt;/td&gt;
&lt;td&gt;2,000/mo&lt;/td&gt;
&lt;td&gt;Text + Visual verify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agency Pro&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;10,000/mo&lt;/td&gt;
&lt;td&gt;All tiers + Phone verify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;$499/mo&lt;/td&gt;
&lt;td&gt;50,000/mo&lt;/td&gt;
&lt;td&gt;Dedicated GPU + SLA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pay-per-call also available: 100 calls for $12, 500 for $45, 2,000 for $149.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for AI Agents
&lt;/h2&gt;

&lt;p&gt;Local-Eye is designed for autonomous use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAPI spec&lt;/strong&gt; at &lt;code&gt;/openapi.json&lt;/code&gt; (scoped by tier — free keys see 4 endpoints, paid see 7)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI plugin manifest&lt;/strong&gt; at &lt;code&gt;/.well-known/ai-plugin.json&lt;/code&gt; for agent discovery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;402 payment headers&lt;/strong&gt; — when a free-tier key hits a paid endpoint, the response includes &lt;code&gt;upgrade_url&lt;/code&gt; and &lt;code&gt;pay_per_call&lt;/code&gt; links so agents can self-upgrade&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No CAPTCHAs, no email verification&lt;/strong&gt; — agents can register and start using immediately
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;402&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;agents&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;can&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;follow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;upgrade_url&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"payment_required"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"upgrade_options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"starter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$29/mo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://buy.stripe.com/..."&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pay_per_call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://buy.stripe.com/..."&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Get a free API key: &lt;a href="https://localeye.co" rel="noopener noreferrer"&gt;localeye.co&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Make your first request:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.localeye.co/v1/verify-web-presence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-API-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://news.ycombinator.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="c1"&gt;# {"status": "verified", "http_status": 200, "content_type": "text/html", ...}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Phone verification callbacks&lt;/strong&gt; — webhook support for async phone call results&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured data extraction&lt;/strong&gt; — automatically parse business hours, prices, contact info&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch endpoints&lt;/strong&gt; — verify multiple URLs in one request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom headers&lt;/strong&gt; — send cookies, auth tokens, user-agent strings&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Try it free:&lt;/strong&gt; &lt;a href="https://localeye.co" rel="noopener noreferrer"&gt;localeye.co&lt;/a&gt; — 5 requests/day, no credit card needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://api.localeye.co/docs" rel="noopener noreferrer"&gt;api.localeye.co/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Drop a comment or reach me at &lt;a href="mailto:info@brandbooststudio.co"&gt;info@brandbooststudio.co&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>webscraping</category>
      <category>launch</category>
    </item>
  </channel>
</rss>
