<?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: feveroliang</title>
    <description>The latest articles on DEV Community by feveroliang (@feveroliang_1c30ae32b2ad7).</description>
    <link>https://dev.to/feveroliang_1c30ae32b2ad7</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3521447%2F9679e004-1274-4d1d-9131-baf812b31b66.png</url>
      <title>DEV Community: feveroliang</title>
      <link>https://dev.to/feveroliang_1c30ae32b2ad7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/feveroliang_1c30ae32b2ad7"/>
    <language>en</language>
    <item>
      <title>Your AI agent can't read a scanned PDF. This gives it the text, page by page</title>
      <dc:creator>feveroliang</dc:creator>
      <pubDate>Fri, 30 Oct 2026 17:37:41 +0000</pubDate>
      <link>https://dev.to/feveroliang_1c30ae32b2ad7/your-ai-agent-cant-read-a-scanned-pdf-this-gives-it-the-text-page-by-page-15g</link>
      <guid>https://dev.to/feveroliang_1c30ae32b2ad7/your-ai-agent-cant-read-a-scanned-pdf-this-gives-it-the-text-page-by-page-15g</guid>
      <description>&lt;p&gt;Hand an AI agent a PDF link and one of two things happens. The file is too big for its context, or the PDF is a scan and contains no text at all.&lt;/p&gt;

&lt;p&gt;So I built a tool that returns &lt;strong&gt;the text of any PDF, one row per page&lt;/strong&gt;. Pages that are scans get read by OCR in the same run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fscad9bn4vl28h9f0z62j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fscad9bn4vl28h9f0z62j.png" alt="Real output: a research paper read from its text layer, and two scans read by OCR" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the rows look like
&lt;/h2&gt;

&lt;p&gt;The default run reads three PDFs, so you can see both paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a 14-page research paper, where &lt;strong&gt;every page is read from the text layer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;two scanned brochures with no text layer, &lt;strong&gt;read by OCR&lt;/strong&gt; at 91% confidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each row says how its page was read (&lt;code&gt;text-layer&lt;/code&gt; or &lt;code&gt;ocr&lt;/code&gt;) and carries the OCR confidence. Long pages are split into rows under 3 KB at paragraph breaks, which is the size an agent's context and a RAG index want. Each page is still charged once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it's cheap and doesn't break
&lt;/h2&gt;

&lt;p&gt;There's no third-party OCR service and no API key. pdf.js, the engine inside Firefox, reads the text layer, and Tesseract reads the scans, both inside the Actor. There's also no website to scrape, so there's no markup that can change under it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://apify.com/appdata-labs/pdf-text-extractor" rel="noopener noreferrer"&gt;PDF Text Extractor&lt;/a&gt;&lt;/strong&gt;: $3 per 1,000 pages with text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://apify.com/appdata-labs/image-to-text-ocr" rel="noopener noreferrer"&gt;Image to Text OCR&lt;/a&gt;&lt;/strong&gt;: the same OCR for screenshots, receipts and photos, at $4 per 1,000 images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Blank pages and dead links are rows that say what went wrong, and they're never charged.&lt;/p&gt;

&lt;p&gt;Ready to run: &lt;a href="https://apify.com/appdata-labs/pdf-text-extractor/examples/pdf-to-text-for-rag" rel="noopener noreferrer"&gt;PDF to page-tagged chunks for RAG&lt;/a&gt; · &lt;a href="https://apify.com/appdata-labs/pdf-text-extractor/examples/scanned-pdf-ocr" rel="noopener noreferrer"&gt;scanned PDF to text&lt;/a&gt; · &lt;a href="https://apify.com/appdata-labs/image-to-text-ocr/examples/screenshot-to-text" rel="noopener noreferrer"&gt;screenshot to text&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's the worst PDF you've had to get text out of?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>rag</category>
      <category>api</category>
    </item>
    <item>
      <title>I built a Google Play lead finder — pick a category, get every app company and its contact</title>
      <dc:creator>feveroliang</dc:creator>
      <pubDate>Wed, 28 Oct 2026 09:27:40 +0000</pubDate>
      <link>https://dev.to/feveroliang_1c30ae32b2ad7/i-built-a-google-play-lead-finder-pick-a-category-get-every-app-company-and-its-contact-kjm</link>
      <guid>https://dev.to/feveroliang_1c30ae32b2ad7/i-built-a-google-play-lead-finder-pick-a-category-get-every-app-company-and-its-contact-kjm</guid>
      <description>&lt;p&gt;Selling to app companies? Your prospect list is already on Google Play. You just can't export it.&lt;/p&gt;

&lt;p&gt;So I built a tool that does: &lt;strong&gt;pick a category, get the apps in it with installs, rating and the developer email&lt;/strong&gt; each company publishes on its listing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fane13mg0x7fuh7oxj2rr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fane13mg0x7fuh7oxj2rr.png" alt="Real output: finance apps on Google Play with installs and developer emails" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every app on the category page&lt;/strong&gt; — 30 to 90 per category, per country&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Installs, rating, genre, last update&lt;/strong&gt; for each one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The developer's published email and website&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filters that run before you pay&lt;/strong&gt;: minimum installs, "has an email"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick categories — &lt;code&gt;FINANCE&lt;/code&gt;, &lt;code&gt;Health &amp;amp; Fitness&lt;/code&gt;, &lt;code&gt;GAME_PUZZLE&lt;/code&gt;… or &lt;code&gt;TOP&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pick countries — every store lists different apps&lt;/li&gt;
&lt;li&gt;Run it → JSON, CSV or Excel&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fintech companies in the US and UK with 100K+ installs and a contact email took one run: &lt;strong&gt;33 companies.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it doesn't break
&lt;/h2&gt;

&lt;p&gt;Most Google Play scrapers use search or Google's internal API. Both are disallowed by Google Play's robots.txt, and both change without warning. This one reads only the &lt;strong&gt;public category pages&lt;/strong&gt; a shopper browses, plus each app's public page. Slower to build. Much harder to break.&lt;/p&gt;

&lt;p&gt;You pay only for apps that pass your filters.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://apify.com/appdata-labs/google-play-category-apps" rel="noopener noreferrer"&gt;Try Google Play Category Apps&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ready to run: &lt;a href="https://apify.com/appdata-labs/google-play-category-apps/examples/fintech-app-leads" rel="noopener noreferrer"&gt;fintech companies&lt;/a&gt; · &lt;a href="https://apify.com/appdata-labs/google-play-category-apps/examples/mobile-game-studio-leads" rel="noopener noreferrer"&gt;game studios&lt;/a&gt; · &lt;a href="https://apify.com/appdata-labs/google-play-category-apps/examples/education-app-leads" rel="noopener noreferrer"&gt;EdTech companies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Which category would you pull first? Tell me and I'll add a ready-made example for it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>api</category>
      <category>marketing</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
