<?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: talor</title>
    <description>The latest articles on DEV Community by talor (@talor).</description>
    <link>https://dev.to/talor</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%2F4007575%2Fe6c8e3d6-696f-4e35-b5eb-6d751bcf0f26.jpg</url>
      <title>DEV Community: talor</title>
      <link>https://dev.to/talor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/talor"/>
    <language>en</language>
    <item>
      <title>Web Video at Scale for Foundation Models: DIY (yt-dlp) vs. a Managed Video Data Service</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Mon, 31 Aug 2026 06:23:03 +0000</pubDate>
      <link>https://dev.to/talor/web-video-at-scale-for-foundation-models-diy-yt-dlp-vs-a-managed-video-data-service-d4j</link>
      <guid>https://dev.to/talor/web-video-at-scale-for-foundation-models-diy-yt-dlp-vs-a-managed-video-data-service-d4j</guid>
      <description>&lt;h1&gt;
  
  
  Web Video at Scale for Foundation Models: DIY (yt-dlp) vs. a Managed Video Data Service
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;An engineering-minded comparison for teams building multimodal training pipelines.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you're training a foundation video model, fine-tuning a VLM, or feeding a humanoid-robot policy, one thing becomes unavoidable very quickly: you need &lt;strong&gt;a lot of clean video&lt;/strong&gt;. Not a handful of clips — millions of pre-cut, metadata-rich, timestamp-accurate segments spanning languages, geographies, lighting and edge cases.&lt;/p&gt;

&lt;p&gt;The honest question most teams hit after the first prototype is not "can we get video?" but &lt;em&gt;"can we get it at scale, reliably, and legally?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This post compares two routes to that goal: rolling your own on top of &lt;code&gt;yt-dlp&lt;/code&gt;, versus using a managed video-data service. I keep the stakes practical and the numbers referenced to what the vendor publishes, rather than inventing benchmarks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why web video, specifically?
&lt;/h2&gt;

&lt;p&gt;Before the comparison — a quick reminder of &lt;em&gt;why&lt;/em&gt; teams reach for web-scale video at all.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simulation has a domain gap.&lt;/strong&gt; Synthetic data never quite captures the messiness of real light, physics and human motion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teleoperation doesn't scale.&lt;/strong&gt; Hand-gathered robot demos are expensive and narrow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Curated catalogs are too small.&lt;/strong&gt; Public web video is the only source with real diversity at the size modern models need.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The TalorData Video Data page sizes this opportunity as 8.5B+ video metadata records, 22B+ short-video platform records, and 1.8B hours of video and audio. Even if you discount those figures, the category point holds: the &lt;em&gt;web&lt;/em&gt; is where training-scale video actually lives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Route 1: DIY with &lt;code&gt;yt-dlp&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;yt-dlp&lt;/code&gt; is a fantastic tool for downloading a &lt;strong&gt;single video, or a modest batch&lt;/strong&gt;. The problems aren't about the tool — they're about what happens when you stretch it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What breaks at scale
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits and 403 blocks.&lt;/strong&gt; Platform APIs and pages enforce aggressive throttling once you stop behaving like a browser session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAPTCHAs and bot detection.&lt;/strong&gt; At volume, you will hit reCAPTCHA and fingerprint-based blocking. Your "simple script" turns into a cat-and-mouse game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parsing failure.&lt;/strong&gt; Every platform redesign silently breaks your selectors. You own the maintenance forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata drift.&lt;/strong&gt; Downloading video is easy; keeping &lt;em&gt;aligned, structured metadata&lt;/em&gt; (language, geo, POV, scenario, timestamps) consistent is the real work — and the part that feeds your training loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance.&lt;/strong&gt; Saying "we scraped it" is not the same as &lt;em&gt;documenting provenance, licensing and traceability&lt;/em&gt; for legal review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The real cost
&lt;/h3&gt;

&lt;p&gt;DIY is cheap at video #10 and expensive at video #10,000,000. The marginal cost is hidden — in engineering hours, in failed downloads, in a metadata pipeline you never planned to build, and in compliance work you can't defer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Route 2: A managed video-data service (e.g., TalorData Video Data)
&lt;/h2&gt;

&lt;p&gt;Managed services aim to move that invisible cost into a priced API. Using the vendor's public product description as the frame, the pitch is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consolidated infrastructure.&lt;/strong&gt; Proxy scheduling, anti-bot retries, and parser maintenance live on their side — "one API" instead of your own server farm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-cut, pipeline-ready output.&lt;/strong&gt; Pre-cut MP4 clips with selectable resolution/frame rate, delivered with structured metadata and precise timeframes, ready to drop into a training framework without preprocessing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal by default.&lt;/strong&gt; Video, audio, and captions/transcripts in one source — including word-level timestamps to avoid manual audio-to-text alignment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery to where you train.&lt;/strong&gt; S3, GCS, Azure Blob, or a webhook, plus structured JSON via API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch traceability &amp;amp; compliance stance.&lt;/strong&gt; Public data only, GDPR/CCPA-oriented, with per-batch source/licensing records and DPA support. (Notably, these are claims on the product page — verify against their team before committing.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A core differentiator for teams building &lt;em&gt;foundation&lt;/em&gt; models specifically: ready historical coverage you can't rebuild from scratch, plus &lt;strong&gt;continuous feeds&lt;/strong&gt; for ongoing training/eval refresh.&lt;/p&gt;




&lt;h2&gt;
  
  
  Head-to-head
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;DIY (yt-dlp)&lt;/th&gt;
&lt;th&gt;Managed service&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time to first useful dataset&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost at small scale&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost at very large scale&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;High &amp;amp; hidden&lt;/strong&gt; (ops + compliance)&lt;/td&gt;
&lt;td&gt;Predictable, usage-priced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate-limit / 403 / CAPTCHA handling&lt;/td&gt;
&lt;td&gt;Your problem&lt;/td&gt;
&lt;td&gt;Their infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parser &amp;amp; selector maintenance&lt;/td&gt;
&lt;td&gt;Yours, forever&lt;/td&gt;
&lt;td&gt;Theirs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured metadata alignment&lt;/td&gt;
&lt;td&gt;Build it yourself&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Word-level transcription&lt;/td&gt;
&lt;td&gt;DIY or third-party&lt;/td&gt;
&lt;td&gt;Bundled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance / traceability artifacts&lt;/td&gt;
&lt;td&gt;Build it yourself&lt;/td&gt;
&lt;td&gt;Documented per batch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical coverage&lt;/td&gt;
&lt;td&gt;None (start from today)&lt;/td&gt;
&lt;td&gt;Billions of records (per vendor)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Practical takeaway
&lt;/h2&gt;

&lt;p&gt;The decision isn't "tool vs. tool." It's &lt;strong&gt;"where do you want your fixed engineering cost to live?"&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Evaluating a new idea, or &amp;lt; 100K clips?&lt;/strong&gt; Use &lt;code&gt;yt-dlp&lt;/code&gt; today. It's free, flexible and perfect for prototyping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preparing for actual model training, or refreshing evaluation sets continuously?&lt;/strong&gt; Strong case for a managed pipeline. The win isn't the download — it's the &lt;strong&gt;aligned metadata, word-level transcripts, compliance artifacts, and historical scale&lt;/strong&gt; you'd otherwise have to build and maintain yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My rule of thumb: &lt;em&gt;DIY until you've validated the model and the data quality, then move the "get data reliably at scale" problem to a managed layer so your team can stay focused on the model.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TalorData Video Data product page: &lt;a href="https://www.talordata.com/video-data" rel="noopener noreferrer"&gt;https://www.talordata.com/video-data&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;For the SERP API side (structured search for agents/RAG), the same team also has a real-time search API: &lt;a href="https://www.talordata.com" rel="noopener noreferrer"&gt;https://www.talordata.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This is an independent engineering comparison based on the vendor's published product documentation. Metrics and capabilities should be verified against the official docs before procurement decisions.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building Search-Enabled AI Agents: Integrating Hermes Agent with TalorData SERP API</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Fri, 28 Aug 2026 06:03:54 +0000</pubDate>
      <link>https://dev.to/talor/building-search-enabled-ai-agents-integrating-hermes-agent-with-talordata-serp-api-2fk0</link>
      <guid>https://dev.to/talor/building-search-enabled-ai-agents-integrating-hermes-agent-with-talordata-serp-api-2fk0</guid>
      <description>&lt;p&gt;AI agents are becoming more capable every month.&lt;/p&gt;

&lt;p&gt;Modern agents can reason, plan tasks, call external tools, and interact with different services.&lt;/p&gt;

&lt;p&gt;But one limitation remains:&lt;/p&gt;

&lt;p&gt;Most AI models do not have access to fresh information.&lt;/p&gt;

&lt;p&gt;A language model may understand the internet, but it does not automatically know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;today's news&lt;/li&gt;
&lt;li&gt;current product information&lt;/li&gt;
&lt;li&gt;live search results&lt;/li&gt;
&lt;li&gt;recent documentation updates&lt;/li&gt;
&lt;li&gt;changing market data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where search becomes an important capability layer.&lt;/p&gt;

&lt;p&gt;Instead of giving AI agents only static knowledge, developers can connect them to real-time search infrastructure.&lt;/p&gt;

&lt;p&gt;In this article, we will look at how to add Google Search capabilities to &lt;strong&gt;Hermes Agent&lt;/strong&gt; using the open-source &lt;strong&gt;TalorData plugin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The integration creates a native search workflow where Hermes can decide when it needs search and retrieve structured results through the TalorData SERP API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI Agents Need Real-Time Search
&lt;/h2&gt;

&lt;p&gt;Traditional chatbots mainly rely on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model parameters&lt;/li&gt;
&lt;li&gt;uploaded documents&lt;/li&gt;
&lt;li&gt;predefined knowledge bases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But real-world tasks often require fresh information.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Find the latest AI research news&lt;/p&gt;

&lt;p&gt;Compare current smartphone prices&lt;/p&gt;

&lt;p&gt;Research competitors&lt;/p&gt;

&lt;p&gt;Monitor market changes&lt;/p&gt;

&lt;p&gt;Find updated documentation&lt;/p&gt;

&lt;p&gt;These tasks require access to live web data.&lt;/p&gt;

&lt;p&gt;A search-enabled agent architecture looks like this:&lt;/p&gt;

&lt;p&gt;User Request&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;AI Agent&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Tool Selection&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Search API&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Structured Results&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Final Answer&lt;/p&gt;

&lt;p&gt;The key idea:&lt;/p&gt;

&lt;p&gt;The AI model does not need to browse manually.&lt;/p&gt;

&lt;p&gt;It needs a reliable search tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Hermes Agent is an open-source AI agent from Nous Research.&lt;/p&gt;

&lt;p&gt;It works across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;terminal environments&lt;/li&gt;
&lt;li&gt;desktop workflows&lt;/li&gt;
&lt;li&gt;messaging platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike simple chat applications, Hermes is designed around tool usage.&lt;/p&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understand user intent&lt;/li&gt;
&lt;li&gt;select tools&lt;/li&gt;
&lt;li&gt;execute actions&lt;/li&gt;
&lt;li&gt;combine multiple information sources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes Hermes a good foundation for building search-powered AI workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem with Traditional Web Search Integration
&lt;/h2&gt;

&lt;p&gt;Many AI applications add search through simple scraping.&lt;/p&gt;

&lt;p&gt;The workflow often looks like:&lt;/p&gt;

&lt;p&gt;AI Agent&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Browser Automation&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Search Engine HTML&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Parser&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Extract Results&lt;/p&gt;

&lt;p&gt;This approach creates several problems:&lt;/p&gt;

&lt;h2&gt;
  
  
  Fragile Parsing
&lt;/h2&gt;

&lt;p&gt;Search pages change frequently.&lt;/p&gt;

&lt;p&gt;A selector that works today may fail after a layout update.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintenance Cost
&lt;/h2&gt;

&lt;p&gt;Developers need to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser automation&lt;/li&gt;
&lt;li&gt;proxies&lt;/li&gt;
&lt;li&gt;CAPTCHA handling&lt;/li&gt;
&lt;li&gt;request failures&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limited Context
&lt;/h2&gt;

&lt;p&gt;Raw HTML is not ideal for AI agents.&lt;/p&gt;

&lt;p&gt;Agents need structured information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"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;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;p&gt;not thousands of lines of markup.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Better Approach: Structured SERP Data
&lt;/h2&gt;

&lt;p&gt;A SERP API provides search results in a format designed for applications.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;HTML page&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Parse content&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Extract data&lt;/p&gt;

&lt;p&gt;You get:&lt;/p&gt;

&lt;p&gt;API Request&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Structured JSON&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Agent Tool&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;AI Reasoning&lt;/p&gt;

&lt;p&gt;This approach is much more suitable for AI agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  TalorData Hermes Plugin Architecture
&lt;/h2&gt;

&lt;p&gt;The TalorData plugin adds search capabilities directly into Hermes.&lt;/p&gt;

&lt;p&gt;The architecture:&lt;/p&gt;

&lt;p&gt;Hermes Agent&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;TalorData Plugin&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;SERP API&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Google Search Results&lt;/p&gt;

&lt;p&gt;The plugin provides two search paths:&lt;/p&gt;

&lt;p&gt;Task    Tool&lt;br&gt;
General web search  web_search&lt;br&gt;
Advanced Google search  talor_google_search&lt;/p&gt;

&lt;p&gt;The agent can choose the correct tool depending on the request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the Plugin
&lt;/h2&gt;

&lt;p&gt;First, make sure Hermes Agent is installed.&lt;/p&gt;

&lt;p&gt;Clone the plugin:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/TalorData/talor-hermes-plugin" rel="noopener noreferrer"&gt;https://github.com/TalorData/talor-hermes-plugin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;p&gt;cd talor-hermes-plugin&lt;/p&gt;

&lt;p&gt;uv pip install .&lt;/p&gt;

&lt;p&gt;Enable the plugin:&lt;/p&gt;

&lt;p&gt;hermes plugins enable talor&lt;/p&gt;

&lt;p&gt;Verify:&lt;/p&gt;

&lt;p&gt;hermes plugins list&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring the API Token
&lt;/h2&gt;

&lt;p&gt;The plugin uses:&lt;/p&gt;

&lt;p&gt;TALOR_API_TOKEN&lt;/p&gt;

&lt;p&gt;Set your environment variable:&lt;/p&gt;

&lt;p&gt;export TALOR_API_TOKEN="your_token"&lt;/p&gt;

&lt;p&gt;Now Hermes can authenticate search requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Search Inside Hermes
&lt;/h2&gt;

&lt;p&gt;After installation, Hermes can use natural language prompts.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Find the latest AI news&lt;/p&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand the request&lt;/li&gt;
&lt;li&gt;Decide search is needed&lt;/li&gt;
&lt;li&gt;Query Google&lt;/li&gt;
&lt;li&gt;Analyze results&lt;/li&gt;
&lt;li&gt;Generate a response&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advanced Google Search Parameters
&lt;/h2&gt;

&lt;p&gt;One important advantage of structured search APIs is parameter control.&lt;/p&gt;

&lt;p&gt;Developers can specify:&lt;/p&gt;

&lt;h2&gt;
  
  
  Location
&lt;/h2&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Germany&lt;/p&gt;

&lt;h2&gt;
  
  
  Language
&lt;/h2&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;German&lt;/p&gt;

&lt;h2&gt;
  
  
  Device
&lt;/h2&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;mobile&lt;/p&gt;

&lt;h2&gt;
  
  
  Search Type
&lt;/h2&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;news&lt;/p&gt;

&lt;p&gt;images&lt;/p&gt;

&lt;p&gt;shopping&lt;/p&gt;

&lt;p&gt;videos&lt;/p&gt;

&lt;p&gt;This enables more accurate research workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Building an AI Research Assistant
&lt;/h2&gt;

&lt;p&gt;Imagine asking:&lt;/p&gt;

&lt;p&gt;Find the latest AI infrastructure trends.&lt;br&gt;
Summarize major announcements from the past month.&lt;/p&gt;

&lt;p&gt;A search-enabled agent workflow:&lt;/p&gt;

&lt;p&gt;User&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Hermes Agent&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Google Search&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Retrieve Sources&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Analyze Content&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Generate Report&lt;/p&gt;

&lt;p&gt;The agent can combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search results&lt;/li&gt;
&lt;li&gt;reasoning&lt;/li&gt;
&lt;li&gt;summarization&lt;/li&gt;
&lt;li&gt;user instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example: Market Research Agent
&lt;/h2&gt;

&lt;p&gt;Another use case:&lt;/p&gt;

&lt;p&gt;Compare AI coding assistants in 2026.&lt;br&gt;
Find pricing and recent product changes.&lt;/p&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search multiple sources&lt;/li&gt;
&lt;li&gt;Extract current information&lt;/li&gt;
&lt;li&gt;Compare products&lt;/li&gt;
&lt;li&gt;Generate a report&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without real-time search, this workflow quickly becomes outdated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Tool Selection Matters
&lt;/h2&gt;

&lt;p&gt;A good AI agent should not force users to manually select tools.&lt;/p&gt;

&lt;p&gt;Users should simply describe their goal.&lt;/p&gt;

&lt;p&gt;Bad experience:&lt;/p&gt;

&lt;p&gt;Use Google Search Tool A&lt;br&gt;
Use News Tool B&lt;br&gt;
Use Extractor Tool C&lt;/p&gt;

&lt;p&gt;Better experience:&lt;/p&gt;

&lt;p&gt;Find recent AI security research&lt;/p&gt;

&lt;p&gt;The agent decides:&lt;/p&gt;

&lt;p&gt;Need current information&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Use search tool&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Retrieve results&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Answer user&lt;/p&gt;

&lt;p&gt;This is the direction agent-native applications are moving toward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source and Extensibility
&lt;/h2&gt;

&lt;p&gt;The Hermes plugin is open source.&lt;/p&gt;

&lt;p&gt;Developers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect the implementation&lt;/li&gt;
&lt;li&gt;customize workflows&lt;/li&gt;
&lt;li&gt;contribute improvements&lt;/li&gt;
&lt;li&gt;build new agent capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current integration supports Google search.&lt;/p&gt;

&lt;p&gt;Future possibilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;additional search engines&lt;/li&gt;
&lt;li&gt;specialized data sources&lt;/li&gt;
&lt;li&gt;custom agent workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building the Next Generation of AI Applications
&lt;/h2&gt;

&lt;p&gt;Search is becoming a fundamental capability for AI agents.&lt;/p&gt;

&lt;p&gt;The future agent stack will likely include:&lt;/p&gt;

&lt;p&gt;LLM&lt;/p&gt;

&lt;p&gt;+&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;+&lt;/p&gt;

&lt;p&gt;Real-Time Data&lt;/p&gt;

&lt;p&gt;+&lt;/p&gt;

&lt;p&gt;Memory&lt;/p&gt;

&lt;p&gt;+&lt;/p&gt;

&lt;p&gt;Automation&lt;/p&gt;

&lt;p&gt;Search APIs are not only for SEO tools anymore.&lt;/p&gt;

&lt;p&gt;They are becoming infrastructure for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI assistants&lt;/li&gt;
&lt;li&gt;research agents&lt;/li&gt;
&lt;li&gt;automation systems&lt;/li&gt;
&lt;li&gt;knowledge applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Giving AI agents access to real-time search changes what they can do.&lt;/p&gt;

&lt;p&gt;Instead of answering only from existing knowledge, agents can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;discover information&lt;/li&gt;
&lt;li&gt;verify facts&lt;/li&gt;
&lt;li&gt;monitor changes&lt;/li&gt;
&lt;li&gt;perform research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Hermes Agent + TalorData integration demonstrates a simple pattern:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect AI reasoning with reliable external data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That pattern will become increasingly important as AI agents move from conversation systems into real-world applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;Hermes Agent: &lt;a href="https://hermes-agent.nousresearch.com/" rel="noopener noreferrer"&gt;https://hermes-agent.nousresearch.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TalorData: &lt;a href="https://www.talordata.com" rel="noopener noreferrer"&gt;https://www.talordata.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SERP API Documentation: &lt;a href="https://docs.talordata.com/serp-api/introduction" rel="noopener noreferrer"&gt;https://docs.talordata.com/serp-api/introduction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Plugin: &lt;a href="https://github.com/TalorData/talor-hermes-plugin" rel="noopener noreferrer"&gt;https://github.com/TalorData/talor-hermes-plugin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>api</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Build a Google Rank Tracker with Python: From SERP Data to SEO Automation</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Thu, 27 Aug 2026 03:12:31 +0000</pubDate>
      <link>https://dev.to/talor/build-a-google-rank-tracker-with-python-from-serp-data-to-seo-automation-3lim</link>
      <guid>https://dev.to/talor/build-a-google-rank-tracker-with-python-from-serp-data-to-seo-automation-3lim</guid>
      <description>&lt;p&gt;Tracking search rankings sounds simple.&lt;/p&gt;

&lt;p&gt;You choose a keyword, search Google, find your website, and record the position.&lt;/p&gt;

&lt;p&gt;But building a reliable rank tracker is much harder than it looks.&lt;/p&gt;

&lt;p&gt;The moment you move from a personal script to a production system, you face problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Search result pages change frequently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automated requests trigger anti-bot systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search results vary by location and device&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Historical ranking data needs to be stored and analyzed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scaling thousands of keywords becomes expensive and complex&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many SEO tools solve this problem by maintaining large scraping infrastructures.&lt;/p&gt;

&lt;p&gt;But for developers building their own SEO tools, dashboards, or AI applications, maintaining a Google scraper is usually not the best use of engineering time.&lt;/p&gt;

&lt;p&gt;A more practical approach is using structured SERP data through an API.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will build a simple Google rank tracker using Python and a SERP API.&lt;/p&gt;

&lt;p&gt;The goal is not only to get rankings, but to understand the architecture behind a scalable SEO monitoring system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Google Rank Tracker?
&lt;/h2&gt;

&lt;p&gt;A rank tracker is a system that monitors where a website appears in search results for specific keywords.&lt;/p&gt;

&lt;p&gt;A basic workflow looks like this:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;Keyword List&lt;br&gt;
      ↓&lt;br&gt;
Search Engine Query&lt;br&gt;
      ↓&lt;br&gt;
SERP Data Collection&lt;br&gt;
      ↓&lt;br&gt;
Ranking Detection&lt;br&gt;
      ↓&lt;br&gt;
Database Storage&lt;br&gt;
      ↓&lt;br&gt;
SEO Analytics&lt;/p&gt;

&lt;p&gt;For example, you want to monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;python serp api&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;google search api&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;seo automation tools&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system collects:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keyword&lt;/td&gt;
&lt;td&gt;python serp api&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://example.com/" rel="noopener noreferrer"&gt;example.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Position&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;2026-08-27&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Over time, these records become valuable SEO intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Not Just Scrape Google?
&lt;/h2&gt;

&lt;p&gt;The first idea many developers have is: "Why don't I just scrape Google results?"&lt;/p&gt;

&lt;p&gt;For a small experiment, this works:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;import requests&lt;br&gt;
from bs4 import BeautifulSoup&lt;/p&gt;

&lt;p&gt;html = requests.get(&lt;br&gt;
    "&lt;a href="https://www.google.com/search?q=python+serp+api" rel="noopener noreferrer"&gt;https://www.google.com/search?q=python+serp+api&lt;/a&gt;"&lt;br&gt;
).text&lt;/p&gt;

&lt;p&gt;soup = BeautifulSoup(html, "html.parser")&lt;/p&gt;

&lt;p&gt;But production systems quickly run into problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. HTML Changes
&lt;/h3&gt;

&lt;p&gt;Search engines constantly update their frontend.&lt;/p&gt;

&lt;p&gt;A parser based on:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;soup.select(".result")&lt;/p&gt;

&lt;p&gt;may stop working after a layout change.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Anti-Bot Protection
&lt;/h3&gt;

&lt;p&gt;Large-scale scraping requires handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;CAPTCHA&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rate limits&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IP rotation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Browser fingerprints&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proxy management&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Search Context Matters
&lt;/h3&gt;

&lt;p&gt;A Google result depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Location&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Language&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Device&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search settings&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, the ranking for &lt;code&gt;best AI tools&lt;/code&gt; can be different between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;United States + Desktop&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Germany + Mobile&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A production rank tracker needs structured search data with these parameters included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Architecture
&lt;/h2&gt;

&lt;p&gt;A simple rank tracking system can be designed like this:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;            Keywords
                ↓
        SERP API Collector
                ↓
        Ranking Processor
                ↓
           Database
                ↓
        Analytics Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The components:&lt;/p&gt;

&lt;p&gt;Keyword Storage stores what you want to monitor:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;[&lt;br&gt;
  {"keyword": "python serp api", "domain": "example.com"},&lt;br&gt;
  {"keyword": "google search api", "domain": "example.com"}&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;SERP Collector retrieves search results. The collector sends keyword, location, language, device and receives structured search data.&lt;/p&gt;

&lt;p&gt;For this tutorial, we will use the TalorData SERP API as the search data layer. It provides structured Google, Bing, Yandex, and DuckDuckGo results without requiring developers to maintain custom scraping infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Python Project
&lt;/h2&gt;

&lt;p&gt;Create a project:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;rank-tracker/&lt;br&gt;
├── tracker.py&lt;br&gt;
├── keywords.json&lt;br&gt;
└── requirements.txt&lt;/p&gt;

&lt;p&gt;Install dependencies:&lt;/p&gt;

&lt;p&gt;bash&lt;/p&gt;

&lt;p&gt;pip install requests&lt;/p&gt;

&lt;p&gt;Store your API key as an environment variable:&lt;/p&gt;

&lt;p&gt;bash&lt;/p&gt;

&lt;p&gt;export TALOR_API_TOKEN="your_token"&lt;/p&gt;

&lt;p&gt;Avoid putting secrets directly inside your source code:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;h1&gt;
  
  
  Don't do this
&lt;/h1&gt;

&lt;p&gt;API_TOKEN = "123456"&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;import os&lt;/p&gt;

&lt;p&gt;API_TOKEN = os.getenv("TALOR_API_TOKEN")&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetch Google Search Results with Python
&lt;/h2&gt;

&lt;p&gt;Create a simple search function:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;import os&lt;br&gt;
import requests&lt;/p&gt;

&lt;p&gt;API_TOKEN = os.getenv("TALOR_API_TOKEN")&lt;br&gt;
API_URL = "&lt;a href="https://serpapi.talordata.net/serp/v1/request" rel="noopener noreferrer"&gt;https://serpapi.talordata.net/serp/v1/request&lt;/a&gt;"&lt;/p&gt;

&lt;p&gt;def google_search(keyword):&lt;br&gt;
    headers = {"Authorization": f"Bearer {API_TOKEN}"}&lt;br&gt;
    payload = {"engine": "google", "q": keyword}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;results = google_search("python serp api")&lt;br&gt;
print(results)&lt;/p&gt;

&lt;p&gt;The application now has structured SERP data that can be processed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding a Website Ranking Position
&lt;/h2&gt;

&lt;p&gt;The core function of a rank tracker is simple: find where your domain appears.&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;def find_position(results, domain):&lt;br&gt;
    organic = results.get("organic_results", [])&lt;br&gt;
    for item in organic:&lt;br&gt;
        if domain in item["link"]:&lt;br&gt;
            return item["position"]&lt;br&gt;
    return None&lt;/p&gt;

&lt;p&gt;Usage:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;position = find_position(results, "example.com")&lt;br&gt;
print(position)  # Output: 7&lt;/p&gt;

&lt;p&gt;Your website ranks #7 for that keyword.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tracking Multiple Keywords
&lt;/h2&gt;

&lt;p&gt;Real SEO systems monitor hundreds or thousands of keywords.&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;keywords = [&lt;br&gt;
    "python serp api",&lt;br&gt;
    "google search api",&lt;br&gt;
    "seo automation"&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;for keyword in keywords:&lt;br&gt;
    results = google_search(keyword)&lt;br&gt;
    position = find_position(results, "example.com")&lt;br&gt;
    print(keyword, position)&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;python serp api 7&lt;br&gt;
google search api 12&lt;br&gt;
seo automation 5&lt;/p&gt;

&lt;p&gt;This is the foundation of an automated rank tracking system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Location and Device Tracking
&lt;/h2&gt;

&lt;p&gt;Professional SEO monitoring requires context.&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;payload = {&lt;br&gt;
    "engine": "google",&lt;br&gt;
    "q": "best AI tools",&lt;br&gt;
    "location": "Germany",&lt;br&gt;
    "device": "mobile",&lt;br&gt;
    "hl": "de"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Now you can answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How do we rank in Germany?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How does mobile ranking compare?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which markets are improving?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Storing Ranking History
&lt;/h2&gt;

&lt;p&gt;A ranking snapshot is useful. Historical ranking data is much more valuable.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;August 1: Position 15&lt;br&gt;
August 15: Position 9&lt;br&gt;
August 27: Position 5&lt;/p&gt;

&lt;p&gt;A simple database table:&lt;/p&gt;

&lt;p&gt;sql&lt;/p&gt;

&lt;p&gt;CREATE TABLE rankings (&lt;br&gt;
    id INTEGER PRIMARY KEY,&lt;br&gt;
    keyword TEXT,&lt;br&gt;
    domain TEXT,&lt;br&gt;
    position INTEGER,&lt;br&gt;
    location TEXT,&lt;br&gt;
    created_at TIMESTAMP&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Now you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ranking charts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SEO reports&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Competitor analysis&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automating Daily Tracking
&lt;/h2&gt;

&lt;p&gt;Most rank trackers run automatically.&lt;/p&gt;

&lt;p&gt;Example workflow:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;Every Morning&lt;br&gt;
    ↓&lt;br&gt;
Load Keywords&lt;br&gt;
    ↓&lt;br&gt;
Fetch SERP Data&lt;br&gt;
    ↓&lt;br&gt;
Calculate Rankings&lt;br&gt;
    ↓&lt;br&gt;
Save Results&lt;br&gt;
    ↓&lt;br&gt;
Generate Report&lt;/p&gt;

&lt;p&gt;Python scheduling:&lt;/p&gt;

&lt;p&gt;python&lt;/p&gt;

&lt;p&gt;import schedule&lt;br&gt;
import time&lt;/p&gt;

&lt;p&gt;def run_tracker():&lt;br&gt;
    print("Tracking rankings...")&lt;/p&gt;

&lt;p&gt;schedule.every().day.at("09:00").do(run_tracker)&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    schedule.run_pending()&lt;br&gt;
    time.sleep(60)&lt;/p&gt;

&lt;h2&gt;
  
  
  Building AI-Powered SEO Tools
&lt;/h2&gt;

&lt;p&gt;Modern SEO platforms are moving beyond dashboards.&lt;/p&gt;

&lt;p&gt;Search data can become an input source for AI agents.&lt;/p&gt;

&lt;p&gt;Example User Query: "Which keywords lost rankings this week?"&lt;/p&gt;

&lt;p&gt;AI system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Retrieves ranking history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compares changes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Identifies important drops&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Suggests optimization actions&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Architecture:&lt;/p&gt;

&lt;p&gt;text&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
 ↓&lt;br&gt;
AI Agent&lt;br&gt;
 ↓&lt;br&gt;
SERP Data&lt;br&gt;
 ↓&lt;br&gt;
Analysis&lt;br&gt;
 ↓&lt;br&gt;
Recommendation&lt;/p&gt;

&lt;p&gt;This is where structured search data becomes especially valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building a Google rank tracker is not just about collecting search results.&lt;/p&gt;

&lt;p&gt;A useful SEO system requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reliable search data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ranking analysis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Historical storage&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Competitive intelligence&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Python makes the application layer flexible. A SERP API removes the complexity of maintaining search scraping infrastructure.&lt;/p&gt;

&lt;p&gt;Together, they provide a practical foundation for building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SEO SaaS products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keyword monitoring platforms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI SEO assistants&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search intelligence tools&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Search data is becoming an important building block for modern software.&lt;/p&gt;

&lt;p&gt;The future of SEO is not just tracking rankings. It is building intelligent systems that understand search behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TalorData SERP API: &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;www.talordata.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SERP API Documentation:  &lt;a href="https://docs.talordata.com/serp-api/introduction" rel="noopener noreferrer"&gt;https://docs.talordata.com/serp-api/introduction&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python SDK:  &lt;a href="https://github.com/Talordata/talordata-serp-python" rel="noopener noreferrer"&gt;https://github.com/Talordata/talordata-serp-python&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This tutorial was originally published on the TalorData Blog.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>seo</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Search API Reset: What Google's 2027 Shutdown Means for AI Developers</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Wed, 26 Aug 2026 08:45:11 +0000</pubDate>
      <link>https://dev.to/talor/the-search-api-reset-what-googles-2027-shutdown-means-for-ai-developers-43p5</link>
      <guid>https://dev.to/talor/the-search-api-reset-what-googles-2027-shutdown-means-for-ai-developers-43p5</guid>
      <description>&lt;p&gt;If you're building LLM applications, RAG pipelines, or AI agents that rely on real-time search data, you need to pay attention to a date that's closer than you think: &lt;strong&gt;January 1, 2027&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's when Google's Custom Search JSON API shuts down completely. It stopped accepting new customers back in 2025, and now the clock is running for every existing user to migrate.&lt;/p&gt;

&lt;p&gt;Meanwhile, Bing's Search API was retired in August 2025. Two of the biggest search APIs, gone in the span of 18 months.&lt;/p&gt;

&lt;p&gt;If your project depends on either of these, you're not alone — and you're not out of options. But the landscape has changed dramatically, and the way we think about search data in 2026 looks nothing like it did in 2023.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With "Just Scrape It"
&lt;/h2&gt;

&lt;p&gt;When Google and Bing started shutting down their official APIs, the natural developer instinct was: &lt;em&gt;fine, I'll just scrape it myself.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A few lines of Python, maybe &lt;code&gt;requests&lt;/code&gt; + &lt;code&gt;BeautifulSoup&lt;/code&gt;, or a headless browser if the page needed JavaScript. How hard could it be?&lt;/p&gt;

&lt;p&gt;In 2026, the answer is: &lt;strong&gt;much harder than it used to be.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's what you're up against if you try to maintain your own search scraper today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-bot systems are model-driven and adapt within hours.&lt;/strong&gt; TLS fingerprinting catches most unpatched browsers. Cloudflare throws infinite JavaScript challenges at anything that looks suspicious. IP bans ruin weekends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript rendering is now the default, not the exception.&lt;/strong&gt; An estimated 94% of modern websites rely on client-side rendering. The data you need often doesn't exist in the initial HTML payload — it's fetched via XHR after the page loads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google mutates its DOM structure constantly.&lt;/strong&gt; What worked last week breaks this week. Maintaining a fleet of headless Chrome instances with Puppeteer or Playwright to scrape Google in 2026 is, to put it mildly, an exhausting engineering experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ROI on DIY scraping has dropped to zero.&lt;/strong&gt; Since late 2025, Google and Bing have upgraded their anti-bot algorithms to intercept based on behavioral patterns and browser fingerprinting. Writing your own SERP scraper in 2026 is almost certainly a worse investment than buying a managed API — unless your core business is selling scraping technology.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Actually Happening in the SERP API Market
&lt;/h2&gt;

&lt;p&gt;While the official APIs are shutting down, the SERP API market is undergoing a massive transformation. Here are the trends that matter in 2026:&lt;/p&gt;

&lt;h3&gt;
  
  
  Trend 1: AI-Native Endpoints vs. Traditional SEO Tools
&lt;/h3&gt;

&lt;p&gt;The market has split into two distinct camps. Traditional SEO-focused APIs (like SerpApi, DataForSEO) emphasize breadth — parsing local packs, knowledge graphs, shopping results, and every SERP feature you can imagine.&lt;/p&gt;

&lt;p&gt;But there's a new category: AI-native search APIs built specifically for LLMs and RAG pipelines. Instead of returning messy URLs and raw HTML, they output cleaned Markdown and denoised text with native LangChain and LlamaIndex integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trend 2: Raw HTML Is a Liability. Structured JSON Is King.
&lt;/h3&gt;

&lt;p&gt;Two years ago, scraping meant downloading HTML and parsing it with BeautifulSoup. Today, feeding a raw DOM tree to an LLM is actively harmful — it wastes thousands of expensive tokens and increases the risk of hallucinations.&lt;/p&gt;

&lt;p&gt;Modern data pipelines demand clean, noise-free JSON right out of the box. AI developers don't want to write regex; they want an array of &lt;code&gt;organic_results&lt;/code&gt; they can instantly &lt;code&gt;json.dumps()&lt;/code&gt; into their LLM prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trend 3: The End of "Paying for Failures"
&lt;/h3&gt;

&lt;p&gt;This is the biggest shift in the data industry. Legacy providers charged you for every request attempt — if you hit a CAPTCHA, timed out, or got a 403, you still paid for it. Developers have had enough.&lt;/p&gt;

&lt;p&gt;The new industry standard in 2026 is &lt;strong&gt;"Pay-Per-Success."&lt;/strong&gt; If the API doesn't return valid structured data, you shouldn't pay for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trend 4: Cost Efficiency Is Now Survival
&lt;/h3&gt;

&lt;p&gt;With RAG becoming standard, applications are making hundreds of search queries per minute to ground AI models with real-time facts. Legacy SERP APIs charging $2.00–$5.00 per 1,000 requests are destroying the profit margins of AI startups.&lt;/p&gt;

&lt;p&gt;The infrastructure has to get cheaper to sustain AI growth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trend 5: Google's AI Overviews Have Changed Everything
&lt;/h3&gt;

&lt;p&gt;AI Overviews now appear on roughly &lt;strong&gt;48% of tracked queries&lt;/strong&gt;. Traditional "ten blue links" are often pushed below the fold. If your SERP API can't extract AI Overviews and their source references, the data you feed your AI is incomplete.&lt;/p&gt;




&lt;h2&gt;
  
  
  So What Does a SERP API Built for 2026 Look Like?
&lt;/h2&gt;

&lt;p&gt;While evaluating alternatives for an internal RAG migration recently, I came across a SERP API that actually aligns with where the industry is heading. Here's what stood out:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost efficiency&lt;/strong&gt;: $0.25 per 1,000 requests — a fraction of what legacy providers charge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;True pay-per-success&lt;/strong&gt;: You only pay when you get a valid JSON response. Zero charges for blocks, timeouts, or failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built for AI&lt;/strong&gt;: Sub-second latency with perfectly structured JSON output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple integration&lt;/strong&gt;: One endpoint, one API key, and you're getting clean search data from Google, Bing, Yandex, and DuckDuckGo.&lt;/p&gt;

&lt;p&gt;The setup is refreshingly straightforward:&lt;br&gt;
&lt;/p&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_search_results&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.talordata.com/v1/serp&lt;/span&gt;&lt;span class="sh"&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;Authorization&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;Bearer YOUR_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;Content-Type&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;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;payload&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;engine&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;google&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;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;location&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;United States&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;hl&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;en&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&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="n"&gt;url&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="n"&gt;payload&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="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No browser automation. No CAPTCHA handling. No parser maintenance. Just clean, structured search data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;2026 is the year the search API market reset. Google's Custom Search API is going away. Bing's is already gone. DIY scraping has become a maintenance nightmare that few teams can justify.&lt;/p&gt;

&lt;p&gt;The good news is that better alternatives exist — built specifically for the AI era, with the cost structures and output formats that modern applications demand.&lt;/p&gt;

&lt;p&gt;If you're still running on legacy APIs or maintaining your own scraper, this is the year to make a change. The clock is ticking — January 1, 2027, isn't that far away.&lt;/p&gt;

&lt;p&gt;Disclosure: I work at TalorData and build tools for developers who need reliable search data. The opinions here are my own.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why Multimodal Training Data Is Still Broken — And What Actually Fixes It</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Tue, 25 Aug 2026 09:12:43 +0000</pubDate>
      <link>https://dev.to/talor/why-multimodal-training-data-is-still-broken-and-what-actually-fixes-it-1fli</link>
      <guid>https://dev.to/talor/why-multimodal-training-data-is-still-broken-and-what-actually-fixes-it-1fli</guid>
      <description>&lt;h2&gt;
  
  
  Why Multimodal Training Data Is Still Broken — And What Actually Fixes It
&lt;/h2&gt;

&lt;p&gt;The multimodal AI bottleneck in 2026 isn't model architecture or compute — it's data alignment. Getting video, audio, and transcript triplets that share a single timeline, at curriculum scale, across multiple platforms, is a data engineering problem that most ML teams aren't equipped to solve. Here's what we learned building it as a managed service, and what the actual fix looks like.&lt;/p&gt;




&lt;p&gt;Your vision-language model can handle any architecture paper you throw at it. Your training loop is solid. Your GPU cluster is humming.&lt;/p&gt;

&lt;p&gt;Then someone asks: &lt;em&gt;where is the aligned data coming from?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the dirty secret of multimodal AI in 2026. The model architecture race is largely won. The real bottleneck is &lt;strong&gt;data supply&lt;/strong&gt; — specifically, getting video, audio, and transcript triplets that share a single timeline, at the scale your curriculum demands, without spending three quarters building a scraping pipeline that breaks every time a platform changes its DOM.&lt;/p&gt;

&lt;p&gt;I've spent the last two years working on this problem from the supply side. Here's what I've learned.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three Failures of "Just Use yt-dlp"
&lt;/h2&gt;

&lt;p&gt;Every ML engineer's first instinct is to script it themselves. yt-dlp is excellent software. It works. For a few hundred videos, it's perfect.&lt;/p&gt;

&lt;p&gt;Then reality hits at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure 1: Scale fragility
&lt;/h3&gt;

&lt;p&gt;yt-dlp against a single platform works. Running it across YouTube, TikTok, Vimeo, Bilibili, and Instagram simultaneously? You're now managing &lt;strong&gt;five different parsers&lt;/strong&gt;, each one breaking on its own schedule. A single DOM change on any platform means your pipeline goes silent until someone updates the extractor.&lt;/p&gt;

&lt;p&gt;Here's what the maintenance burden actually looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Platform        Extractor breaks when...
──────────────  ─────────────────────────────────
YouTube         Player JS changes (quarterly)
TikTok          Anti-bot fingerprint rotation
Bilibili        Region-based endpoint shifts
Instagram       Auth wall updates
Vimeo           Rate limit policy changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're not building a data pipeline. You're building a &lt;strong&gt;parser maintenance team&lt;/strong&gt; — except the team is one junior engineer who also has model training deadlines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure 2: Alignment is manual
&lt;/h3&gt;

&lt;p&gt;Even if you download everything successfully, you now have raw video files and no transcript. You run Whisper. You get a transcript. It doesn't align with the video timeline because Whisper gives you &lt;strong&gt;sentence-level timestamps, not word-level&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You write alignment code. You debug it. You run it again. You're now a speech engineer, not an ML engineer.&lt;/p&gt;

&lt;p&gt;And here's the part nobody tells you: Whisper's alignment quality degrades on exactly the data you need most — low-resource languages, noisy audio, overlapping speakers. The clips that would be most valuable for training diversity are the ones where alignment fails hardest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure 3: Compliance is invisible — until it isn't
&lt;/h3&gt;

&lt;p&gt;Every video you downloaded has metadata, licensing terms, and platform ToS. When your model ships to production and someone asks "where did this training data come from?", "I ran yt-dlp" is not a compliance answer.&lt;/p&gt;

&lt;p&gt;Your legal team will explain this to you in detail. Usually after the model is already in production and the audit question has already been asked.&lt;/p&gt;

&lt;p&gt;The real cost isn't the engineering hours. It's the &lt;strong&gt;opportunity cost&lt;/strong&gt; of your ML team spending months on infrastructure instead of model improvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  What "Aligned" Actually Means
&lt;/h2&gt;

&lt;p&gt;When I say "aligned multimodal data," I don't mean "video + transcript in the same zip file." I mean:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"clip_0042.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"audio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"clip_0042.m4a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transcript"&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;span class="nl"&gt;"word"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.340&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.580&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"speaker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"speaker_1"&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;span class="nl"&gt;"word"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.620&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.890&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"speaker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"speaker_1"&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;span class="nl"&gt;"metadata"&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="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"scene"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"indoor_conversation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"snr_db"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;18.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"word_accuracy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source_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://..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"capture_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-15"&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;p&gt;All four artifacts — video, audio, word-level transcript, metadata — reference the &lt;strong&gt;same time axis&lt;/strong&gt;. When your model reads transcript word "hello" at timestamp 2.34s, the corresponding audio frame at 2.34s has that word, and the video frame at 2.34s shows the speaker's mouth forming it.&lt;/p&gt;

&lt;p&gt;This is what open-source tools don't give you. Not because the tools are bad, but because &lt;strong&gt;alignment is a data engineering problem, not a download problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The gap between "downloaded" and "aligned" is where most multimodal projects stall. It's the difference between having raw footage and having a training curriculum.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Metrics That Matter
&lt;/h2&gt;

&lt;p&gt;When evaluating multimodal data sources, here's what I'd actually look at:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Word-level timestamp precision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sub-word alignment is the difference between cross-modal attention learning signal and noise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SNR annotation per clip&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your ASR training curriculum depends on knowing which clips are clean vs. noisy — you can't filter what you haven't measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scene/activity tagging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You can't filter a 10M clip dataset by "cooking actions" without metadata. You're back to manual review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Batch traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;When your model ships, you need to prove data provenance: batch IDs, source URLs, capture dates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delivery format parity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;If your data team writes a converter for every vendor's JSON schema, you've traded one engineering problem for another&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most public benchmarks for multimodal data focus on &lt;em&gt;downstream model performance&lt;/em&gt;. Almost none measure the &lt;em&gt;upstream data pipeline cost&lt;/em&gt;. That's the metric that actually determines your team's velocity.&lt;/p&gt;

&lt;p&gt;A useful heuristic: &lt;strong&gt;if the data vendor can't tell you the word-level timestamp precision of their transcript alignment, they haven't measured it.&lt;/strong&gt; And if they haven't measured it, you're the one who's going to discover the gap — during training, when it's expensive to fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Fix Looks Like (From the Supply Side)
&lt;/h2&gt;

&lt;p&gt;I work at &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData&lt;/a&gt;, where we've been building multimodal training datasets as a managed service. Here's what we've learned about what actually fixes the pipeline:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Pre-aligned triplets, not raw downloads
&lt;/h3&gt;

&lt;p&gt;Our video-audio-transcript triplets ship with shared timeline metadata. No Whisper post-processing. No manual alignment. The video, audio, and word-level transcript all reference the same time axis out of the box.&lt;/p&gt;

&lt;p&gt;For VLM training, this means your contrastive learning pairs are source-aligned from day one. For video generation, keyframe-to-caption pairs are already structured. For ASR, you get word-level timestamps without running a forced-aligner.&lt;/p&gt;

&lt;p&gt;The key insight: &lt;strong&gt;alignment should be a property of the data, not a step in your pipeline.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Metadata as a first-class citizen, not an afterthought
&lt;/h3&gt;

&lt;p&gt;Every clip comes with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scene/activity tags (filtered, not raw)&lt;/li&gt;
&lt;li&gt;SNR and word accuracy annotations &lt;strong&gt;per segment&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Language tags across 12+ languages including Southeast Asian low-resource&lt;/li&gt;
&lt;li&gt;Speaker metadata where applicable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't nice-to-have. When you're building a training curriculum for a 10M clip dataset, you need to filter by quality, language, and domain &lt;em&gt;before&lt;/em&gt; you touch the data, not after.&lt;/p&gt;

&lt;p&gt;Think of it this way: metadata isn't annotation. It's &lt;strong&gt;curriculum design input.&lt;/strong&gt; The SNR tag on a clip isn't metadata about the clip — it's a signal that tells your training scheduler whether to include this clip in the clean subset or the noisy augmentation subset.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Batch traceability from capture to delivery
&lt;/h3&gt;

&lt;p&gt;Every dataset batch comes with source records, licensing terms, and capture dates. When your model ships to production and compliance asks "where did this come from?", the answer is a structured manifest, not "I ran a script."&lt;/p&gt;

&lt;p&gt;This matters more than most teams realize. The EU AI Act, the forthcoming US frameworks, and existing GDPR/CCPA requirements all converge on one principle: &lt;strong&gt;you need to be able to trace your training data back to its source.&lt;/strong&gt; Batch traceability isn't a nice-to-have — it's becoming a legal requirement.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Format parity with your existing pipeline
&lt;/h3&gt;

&lt;p&gt;JSON with aligned transcript fields. MP4/M4A for media. CSV for tabular metadata. Delivered via API, webhook, or direct S3/GCS/OSS upload. Your data team shouldn't need to write a single converter.&lt;/p&gt;

&lt;p&gt;The simplest test: &lt;strong&gt;can your data loader ingest the delivery format without modification?&lt;/strong&gt; If the answer is no, you've just inherited integration debt.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Practical Example: VLA Robot Training Data
&lt;/h2&gt;

&lt;p&gt;One use case we've seen explode is &lt;strong&gt;vision-language-action (VLA) models for robotics&lt;/strong&gt;. The challenge is specific and unforgiving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need real first-person or third-person video of manipulation tasks&lt;/li&gt;
&lt;li&gt;You need to filter by action type (grasping, moving, driving) to build balanced training sets&lt;/li&gt;
&lt;li&gt;You need commercial licensing that passes legal review&lt;/li&gt;
&lt;li&gt;You need the data yesterday&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bottleneck? Remote operation is expensive and slow. Simulation has domain gaps. What you actually need is &lt;strong&gt;real demonstration data filtered by action and viewpoint&lt;/strong&gt; — something you can map directly to policy inputs.&lt;/p&gt;

&lt;p&gt;We've built datasets specifically for this: 90K hours of ego-centric home video, 30K hours of stereo vision, 700 hours of dual-arm manipulation. All filterable by action type and viewpoint. Batch licensable with traceability.&lt;/p&gt;

&lt;p&gt;This is the kind of dataset that used to take a robotics lab six months to curate. Now it ships in weeks. And the economics are unambiguous: six months of a robotics engineer's time costs more than the dataset, and you still don't have the dataset.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Cost of Doing It Wrong
&lt;/h2&gt;

&lt;p&gt;Let me put numbers on the invisible cost:&lt;/p&gt;

&lt;p&gt;A senior ML engineer's fully loaded cost is roughly $200K/year. If your team spends 3 months building and maintaining a multimodal data pipeline instead of training models, that's &lt;strong&gt;$50K in opportunity cost&lt;/strong&gt; — before you count the compute wasted on bad data.&lt;/p&gt;

&lt;p&gt;Meanwhile, the actual data cost for a production-grade multimodal training set? It's a fraction of one engineer-month.&lt;/p&gt;

&lt;p&gt;The math is obvious. The reason teams still build their own pipelines is &lt;strong&gt;not economic&lt;/strong&gt; — it's that they don't know a managed alternative exists, or they've been burned by data vendors who ship unaligned zip files with a README.&lt;/p&gt;

&lt;p&gt;Here's the uncomfortable truth: &lt;strong&gt;the "build vs. buy" decision for multimodal data has already been made by every other team in your space.&lt;/strong&gt; The question isn't whether you should source externally. The question is whether you're the last team to figure that out.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Tell My Past Self
&lt;/h2&gt;

&lt;p&gt;If I could go back to the start of our multimodal work, I'd tell myself five things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't build a scraper.&lt;/strong&gt; Not because scraping is wrong, but because your team's time is worth more elsewhere. Every hour spent maintaining parsers is an hour not spent improving your model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Alignment is the bottleneck, not download speed.&lt;/strong&gt; Optimize for word-level timestamp precision, not download throughput. A 10x faster download means nothing if the alignment is unusable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Metadata is training data.&lt;/strong&gt; SNR tags, scene labels, speaker metadata — these aren't annotations, they're curriculum design inputs. Treat them with the same rigor you treat the video files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compliance is a feature, not a checkbox.&lt;/strong&gt; Batch traceability and DPA support aren't nice-to-haves, they're table stakes for production models. If your data source can't provide them, you have a problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with samples.&lt;/strong&gt; Any data vendor who won't let you validate alignment quality before purchasing is hiding something. Always validate. Always.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The multimodal AI bottleneck is &lt;strong&gt;data alignment&lt;/strong&gt;, not model architecture or compute&lt;/li&gt;
&lt;li&gt;"Downloaded" and "aligned" are different problems — the gap between them costs months&lt;/li&gt;
&lt;li&gt;Word-level timestamp precision, SNR annotations, and batch traceability are the metrics that actually matter&lt;/li&gt;
&lt;li&gt;The build-vs-buy math favors external sourcing for most teams ($50K+ opportunity cost vs. fraction of an engineer-month)&lt;/li&gt;
&lt;li&gt;Always validate alignment quality with samples before committing&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;What's your multimodal data pipeline pain point? I'd love to hear what's actually blocking your team in the comments.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Follow me for more on multimodal AI infrastructure. Next up: why SNR annotations are the most underrated signal in ASR training.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>computervision</category>
    </item>
    <item>
      <title>One Year Without the Official Bing Search API: Your Real Options in 2026</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Mon, 24 Aug 2026 07:33:31 +0000</pubDate>
      <link>https://dev.to/talor/one-year-without-the-official-bing-search-api-your-real-options-in-2026-31pj</link>
      <guid>https://dev.to/talor/one-year-without-the-official-bing-search-api-your-real-options-in-2026-31pj</guid>
      <description>&lt;p&gt;One year ago this month, Microsoft quietly retired every official Bing Search API. No dramatic shutdown screen — the endpoints just started returning errors, and thousands of pipelines around the world had to find answers fast.&lt;/p&gt;

&lt;p&gt;I work on a SERP data API (&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData&lt;/a&gt;), so I watched this from an unusual seat: our inbox was the place where the breakage showed up. This post is the summary I wish someone had published back then — what actually broke, which migration paths work, and which ones don't. It's written from that experience, so yes, there's a bias toward structured APIs at the end. I'll try to keep the trade-offs honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Do nothing&lt;/td&gt;
&lt;td&gt;Your pipeline is already broken (or silently degraded)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scrape Bing yourself&lt;/td&gt;
&lt;td&gt;Works for a demo, collapses at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drop Bing entirely&lt;/td&gt;
&lt;td&gt;Legitimate for some products, expensive for others&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured SERP API&lt;/td&gt;
&lt;td&gt;The pragmatic default for most teams&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What exactly happened
&lt;/h2&gt;

&lt;p&gt;Microsoft announced the retirement of the Bing Search APIs (v7) in mid-2025 and pulled the plug in &lt;strong&gt;August 2025&lt;/strong&gt;. Everything under &lt;code&gt;api.bing.microsoft.com&lt;/code&gt; went away: Web Search, News, Image Search, all of it.&lt;/p&gt;

&lt;p&gt;Two things made this messier than a normal deprecation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No official replacement.&lt;/strong&gt; Google's Custom Search JSON API exists for Google, but Microsoft left no successor for Bing. If your product needed &lt;em&gt;Bing&lt;/em&gt; specifically — not "a search engine" — you were on your own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent dependencies.&lt;/strong&gt; A lot of teams didn't have "we depend on Bing Search API v7" written anywhere. It was one HTTP call buried in a service. Some only noticed weeks later, when reports looked odd or agents started citing stale results.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Who got hit hardest
&lt;/h2&gt;

&lt;p&gt;From what we saw, three archetypes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rank-tracking tools&lt;/strong&gt; — Bing positions vanished from dashboards overnight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agents and RAG pipelines&lt;/strong&gt; — anything using Bing as its "fresh information" tool call lost its live-data source. Ironically, many teams didn't build these until after the retirement, and inherited the problem without knowing it ever existed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price/news monitors&lt;/strong&gt; — anything polling Bing News or shopping results on a schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're reading this in 2026 and your pipeline still shows "Bing results," it's worth asking &lt;em&gt;where&lt;/em&gt; those results come from now. There is no official feed anymore. Someone is maintaining that data by hand — maybe you, maybe a vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Path 1: Scrape Bing yourself
&lt;/h2&gt;

&lt;p&gt;This is the first idea everyone has, so let me save you the week: &lt;strong&gt;it works great until it doesn't.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the naive version, which runs fine on your laptop:&lt;br&gt;
&lt;/p&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;

&lt;span class="n"&gt;resp&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;get&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://www.bing.com/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&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;q&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;best serp api&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;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&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;User-Agent&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;Mozilla/5.0&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="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;html.parser&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&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;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&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="n"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;href&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;li&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;li.b_algo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this five times and you're a hero. Run it 5,000 times and you'll discover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fingerprinting.&lt;/strong&gt; Bing is aggressive about bot detection. Plain &lt;code&gt;requests&lt;/code&gt; gets CAPTCHA walls or empty pages quickly; even rotating user agents stops working fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markup drift.&lt;/strong&gt; &lt;code&gt;li.b_algo&lt;/code&gt; is not an API contract. Selectors change without notice, and your parser fails silently — you get &lt;em&gt;fewer&lt;/em&gt; results, not errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hidden cost.&lt;/strong&gt; Between proxy rotation, CAPTCHA solving, and maintenance, DIY scraping at volume typically costs more than paying for structured results — and that's before counting the engineer-hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verdict: fine for a one-off research task. Not a foundation for a product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Path 2: Just drop Bing
&lt;/h2&gt;

&lt;p&gt;Honest option, and sometimes the right one. Ask yourself why you needed Bing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If it was "any search engine will do" — switch to whatever you already have and move on. Bing's global share is small.&lt;/li&gt;
&lt;li&gt;If Bing matters for your users — SEO agencies tracking Bing because clients rank there, regional markets where Bing's share is meaningful, enterprise contexts (Windows defaults, Edge) — then dropping it means losing a feature someone is paying you for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only you know which side you're on. But make the decision consciously; don't let a dead API make it for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Path 3: Structured SERP APIs
&lt;/h2&gt;

&lt;p&gt;This is the path most production systems landed on: a provider maintains the scraping infrastructure (proxies, CAPTCHA handling, parsers) and returns clean JSON per query.&lt;/p&gt;

&lt;p&gt;The nice surprise: &lt;strong&gt;migration is usually smaller than expected&lt;/strong&gt;, because the concept maps almost 1:1 from the old Bing API. Here's the shape of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt; (Bing Search API v7):&lt;br&gt;
&lt;/p&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;resp&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;get&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.bing.microsoft.com/v7.0/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&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;q&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;best serp api&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;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&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;Ocp-Apim-Subscription-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;KEY&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;webPages&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;value&lt;/span&gt;&lt;span class="sh"&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;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt; (generic modern SERP API — same mental model):&lt;br&gt;
&lt;/p&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;resp&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.your-serp-provider.com/v1/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&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;query&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;best serp api&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;engine&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;bing&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;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&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;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;organic_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;          &lt;span class="c1"&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;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Field mapping cheat sheet:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bing v7&lt;/th&gt;
&lt;th&gt;Typical modern SERP API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;webPages.value[].name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;organic_results[].title&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;webPages.value[].url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;organic_results[].url&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;webPages.value[].snippet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;organic_results[].description&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;webPages.totalEstimatedMatches&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;total_results&lt;/code&gt; (or similar)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A bonus you didn't have before: once you're on a multi-engine provider, adding Google/Yandex/DuckDuckGo coverage is often just changing one parameter — useful if your product ever needs cross-engine comparison.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to check when picking a provider
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Billing model.&lt;/strong&gt; Pay-per-success (you're only charged for delivered results) vs monthly quotas that expire unused. For spiky workloads, pay-per-success is usually kinder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency profile.&lt;/strong&gt; If results feed a live agent loop, sub-second responses matter; batch rank-checking can tolerate queues. These are different products wearing similar names — check the numbers, not the marketing. (For reference: we run P90 under 0.8s, which is the tier you want for agent loops.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engine coverage beyond Google.&lt;/strong&gt; If you came here because of Bing, pick a provider that treats Bing as a first-class engine, not a checkbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured extras.&lt;/strong&gt; People Also Ask, knowledge panels, local packs — cheap to include now, painful to retrofit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When you don't need any of this
&lt;/h2&gt;

&lt;p&gt;Full honesty section, because every article like this is secretly an ad for something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You need one page of one site?&lt;/strong&gt; Use &lt;code&gt;requests&lt;/code&gt; + a parser, or a headless browser. Done in an afternoon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need cached/archival search data for research?&lt;/strong&gt; Public datasets may beat any API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your LLM just needs "some" fresh context occasionally and precision doesn't matter?&lt;/strong&gt; A general-purpose search integration might be enough.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SERP infrastructure earns its cost at the point where correctness, freshness, and scale intersect. Below that line, it's overkill — and pretending otherwise is how vendors lose trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The Bing API retirement was a quiet event with loud consequences: it turned "search results as an input" from something you could take for granted into something you have to source deliberately.&lt;/p&gt;

&lt;p&gt;If you're evaluating providers right now — or checking what your current tool is actually doing behind the scenes — you can try ours at &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;talordata.com&lt;/a&gt;. Free responses come with signup, no subscription attached; you only pay for successful results after that.&lt;/p&gt;

&lt;p&gt;Either way: go look at what your pipeline calls for search results, and make sure the answer isn't a dead endpoint.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What did your team do after the retirement? I'm curious whether other folks saw the same patterns in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webscraping</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building Modern SEO Tools: A Developer's Guide to DataForSEO Alternatives and Real-Time SERP APIs</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Sat, 22 Aug 2026 01:40:23 +0000</pubDate>
      <link>https://dev.to/talor/building-modern-seo-tools-a-developers-guide-to-dataforseo-alternatives-and-real-time-serp-apis-25l7</link>
      <guid>https://dev.to/talor/building-modern-seo-tools-a-developers-guide-to-dataforseo-alternatives-and-real-time-serp-apis-25l7</guid>
      <description>&lt;p&gt;SEO tools are changing.&lt;/p&gt;

&lt;p&gt;For years, SEO platforms mainly focused on one thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tracking rankings.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Developers built systems that collected:&lt;/p&gt;

&lt;p&gt;keyword positions&lt;br&gt;
competitor rankings&lt;br&gt;
backlink data&lt;br&gt;
search visibility reports&lt;/p&gt;

&lt;p&gt;Companies like DataForSEO became popular because they solved a difficult infrastructure problem: accessing structured search engine data without building everything from scratch.&lt;/p&gt;

&lt;p&gt;But modern SEO applications are evolving.&lt;/p&gt;

&lt;p&gt;Today, developers are building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI SEO agents&lt;/li&gt;
&lt;li&gt;automated content optimization tools&lt;/li&gt;
&lt;li&gt;competitor intelligence systems&lt;/li&gt;
&lt;li&gt;RAG applications&lt;/li&gt;
&lt;li&gt;marketing automation workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These applications need something different.&lt;/p&gt;

&lt;p&gt;They do not just need historical ranking reports.&lt;/p&gt;

&lt;p&gt;They need &lt;strong&gt;real-time search intelligence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is why many developers are now looking for a &lt;strong&gt;DataForSEO alternative&lt;/strong&gt; that works better for AI-powered and real-time applications.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem: SEO Data Is Becoming an AI Infrastructure Layer
&lt;/h2&gt;

&lt;p&gt;Traditional SEO workflow:&lt;br&gt;
Keyword&lt;br&gt;
   ↓&lt;br&gt;
SERP Collection&lt;br&gt;
   ↓&lt;br&gt;
Database&lt;br&gt;
   ↓&lt;br&gt;
Dashboard&lt;br&gt;
   ↓&lt;br&gt;
Human Analysis&lt;br&gt;
This works well for reporting.&lt;/p&gt;

&lt;p&gt;But AI-powered workflows look different:&lt;/p&gt;

&lt;p&gt;User Question&lt;br&gt;
      ↓&lt;br&gt;
AI Agent&lt;br&gt;
      ↓&lt;br&gt;
Search API&lt;br&gt;
      ↓&lt;br&gt;
Fresh SERP Data&lt;br&gt;
      ↓&lt;br&gt;
AI Decision&lt;/p&gt;

&lt;p&gt;The search data is no longer just displayed.&lt;/p&gt;

&lt;p&gt;It becomes input for another system.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A user asks:&lt;/p&gt;

&lt;p&gt;"Why did my website lose rankings this week?"&lt;/p&gt;

&lt;p&gt;A traditional SEO dashboard might show:&lt;/p&gt;

&lt;p&gt;Position changed:&lt;br&gt;
&lt;strong&gt;3 → 8&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But an AI SEO agent needs more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who replaced the page?&lt;/li&gt;
&lt;li&gt;What content changed?&lt;/li&gt;
&lt;li&gt;What keywords are competitors targeting?&lt;/li&gt;
&lt;li&gt;Did SERP intent change?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To answer these questions, the system needs fresh search data.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Developers Look Beyond Traditional SERP Providers
&lt;/h2&gt;

&lt;p&gt;DataForSEO remains a powerful solution for many SEO platforms.&lt;/p&gt;

&lt;p&gt;It is widely used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enterprise rank tracking&lt;/li&gt;
&lt;li&gt;keyword databases&lt;/li&gt;
&lt;li&gt;SEO reporting&lt;/li&gt;
&lt;li&gt;large-scale analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, developers building modern applications often have additional requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Real-Time Search Results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Search engines change constantly.&lt;/p&gt;

&lt;p&gt;A page ranking today may disappear tomorrow because of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;algorithm updates&lt;/li&gt;
&lt;li&gt;competitor content changes&lt;/li&gt;
&lt;li&gt;new SERP features&lt;/li&gt;
&lt;li&gt;user intent shifts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI applications cannot depend only on stored datasets.&lt;/p&gt;

&lt;p&gt;They need live information.&lt;/p&gt;

&lt;p&gt;A search API provides a bridge:&lt;/p&gt;

&lt;p&gt;LLM&lt;br&gt;
 +&lt;br&gt;
Real-Time Search Data&lt;br&gt;
 =&lt;br&gt;
Grounded AI Application&lt;/p&gt;

&lt;p&gt;TalorData's SERP API is designed around this workflow, providing structured search data that applications can consume directly.&lt;br&gt;
&lt;strong&gt;2. Structured JSON Instead of Search Pages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Search engines return pages designed for humans.&lt;/p&gt;

&lt;p&gt;Applications need structured objects.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;HTML&lt;br&gt;
 ↓&lt;br&gt;
Parser&lt;br&gt;
 ↓&lt;br&gt;
Custom extraction&lt;br&gt;
 ↓&lt;br&gt;
Database&lt;/p&gt;

&lt;p&gt;developers want:&lt;/p&gt;

&lt;p&gt;API Request&lt;br&gt;
 ↓&lt;br&gt;
JSON Response&lt;br&gt;
 ↓&lt;br&gt;
Application Logic&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"best project management software"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&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;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Product"&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://example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Project management solution..."&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;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;p&gt;This format can immediately feed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;RAG pipelines&lt;/li&gt;
&lt;li&gt;analytics systems&lt;/li&gt;
&lt;li&gt;dashboards&lt;/li&gt;
&lt;li&gt;automation workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building a Simple SERP Data Pipeline
&lt;/h2&gt;

&lt;p&gt;Let's look at a simple example.&lt;/p&gt;

&lt;p&gt;Imagine we are building an AI SEO assistant.&lt;/p&gt;

&lt;p&gt;The workflow:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
 |&lt;br&gt;
 | "Analyze my competitors"&lt;br&gt;
 |&lt;br&gt;
AI Agent&lt;br&gt;
 |&lt;br&gt;
SERP API&lt;br&gt;
 |&lt;br&gt;
Google Results&lt;br&gt;
 |&lt;br&gt;
Analysis Engine&lt;br&gt;
 |&lt;br&gt;
Recommendation&lt;/p&gt;

&lt;p&gt;The search layer should be independent from the AI layer.&lt;/p&gt;

&lt;p&gt;This makes the system easier to maintain.&lt;/p&gt;
&lt;h2&gt;
  
  
  Example: Calling a SERP API with Python
&lt;/h2&gt;

&lt;p&gt;First, store your API key as an environment variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TALOR_API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_token"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never hardcode API keys inside your application.&lt;/p&gt;

&lt;p&gt;Now create a simple request:&lt;br&gt;
&lt;/p&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;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;


&lt;span class="n"&gt;API_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TALOR_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://serpapi.talordata.net/serp/v1/request&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="n"&gt;payload&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;engine&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;google&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;q&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;best AI SEO tools&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;location&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;United States&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;device&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;desktop&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;num&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&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;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&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;Content-Type&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;application/x-www-form-urlencoded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&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="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&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="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A typical SERP response contains structured information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;organic results&lt;/li&gt;
&lt;li&gt;rankings&lt;/li&gt;
&lt;li&gt;titles&lt;/li&gt;
&lt;li&gt;URLs&lt;/li&gt;
&lt;li&gt;snippets&lt;/li&gt;
&lt;li&gt;pagination data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it much easier to build higher-level applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning SERP Data Into an AI SEO Agent
&lt;/h2&gt;

&lt;p&gt;The interesting part is not collecting search results.&lt;/p&gt;

&lt;p&gt;The interesting part is what you do with them.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Input&lt;/strong&gt;&lt;br&gt;
Find opportunities to improve my ranking for "AI marketing tools"&lt;br&gt;
&lt;strong&gt;Agent workflow&lt;/strong&gt;&lt;br&gt;
Receive query&lt;br&gt;
↓&lt;br&gt;
Fetch current SERP results&lt;br&gt;
↓&lt;br&gt;
Analyze top ranking pages&lt;br&gt;
↓&lt;br&gt;
Compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;content structure&lt;/li&gt;
&lt;li&gt;keywords&lt;/li&gt;
&lt;li&gt;topics&lt;/li&gt;
&lt;li&gt;backlinks
↓
Generate recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI agent is not guessing.&lt;/p&gt;

&lt;p&gt;It is reasoning over current external data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Location and Language Matter
&lt;/h2&gt;

&lt;p&gt;One common mistake in SEO systems is assuming search results are universal.&lt;/p&gt;

&lt;p&gt;They are not.&lt;/p&gt;

&lt;p&gt;The same query can produce different results depending on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;country&lt;/li&gt;
&lt;li&gt;city&lt;/li&gt;
&lt;li&gt;language&lt;/li&gt;
&lt;li&gt;device&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Query:&lt;br&gt;
"best CRM software"&lt;/p&gt;

&lt;p&gt;United States:&lt;/p&gt;

&lt;p&gt;US SaaS companies&lt;/p&gt;

&lt;p&gt;Japan:&lt;/p&gt;

&lt;p&gt;Japanese SaaS companies&lt;/p&gt;

&lt;p&gt;Germany:&lt;/p&gt;

&lt;p&gt;German market results&lt;/p&gt;

&lt;p&gt;A modern SERP API should support these controls.&lt;/p&gt;

&lt;p&gt;This matters for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;international SEO&lt;/li&gt;
&lt;li&gt;local SEO&lt;/li&gt;
&lt;li&gt;e-commerce monitoring&lt;/li&gt;
&lt;li&gt;competitor research&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building RAG Systems With Search Data
&lt;/h2&gt;

&lt;p&gt;Another growing use case is combining SERP APIs with Retrieval-Augmented Generation.&lt;/p&gt;

&lt;p&gt;Traditional RAG:&lt;/p&gt;

&lt;p&gt;Documents&lt;br&gt;
 ↓&lt;br&gt;
Vector Database&lt;br&gt;
 ↓&lt;br&gt;
LLM&lt;/p&gt;

&lt;p&gt;Search-powered RAG:&lt;/p&gt;

&lt;p&gt;User Question&lt;br&gt;
 ↓&lt;br&gt;
Search API&lt;br&gt;
 ↓&lt;br&gt;
Fresh Web Sources&lt;br&gt;
 ↓&lt;br&gt;
LLM&lt;br&gt;
 ↓&lt;br&gt;
Answer&lt;/p&gt;

&lt;p&gt;This is useful when the information changes frequently.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product prices&lt;/li&gt;
&lt;li&gt;technology updates&lt;/li&gt;
&lt;li&gt;market research&lt;/li&gt;
&lt;li&gt;competitor analysis&lt;/li&gt;
&lt;li&gt;news monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Should Developers Look for in a DataForSEO Alternative?
&lt;/h2&gt;

&lt;p&gt;When evaluating a SERP API, focus on practical engineering requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API simplicity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Can you integrate it quickly?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Response quality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does the output contain the fields your application actually needs?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search flexibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Can you control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;location&lt;/li&gt;
&lt;li&gt;language&lt;/li&gt;
&lt;li&gt;device&lt;/li&gt;
&lt;li&gt;search type?
&lt;strong&gt;Scalability&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Can it support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prototypes&lt;/li&gt;
&lt;li&gt;SaaS products&lt;/li&gt;
&lt;li&gt;enterprise workloads?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good SERP API should reduce infrastructure work, not create another maintenance problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why TalorData Fits Modern SEO Applications
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData&lt;/a&gt; focuses on structured search infrastructure for developers building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;SEO platforms&lt;/li&gt;
&lt;li&gt;research assistants&lt;/li&gt;
&lt;li&gt;automation workflows&lt;/li&gt;
&lt;li&gt;data products&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Give applications access to reliable search data without requiring teams to maintain their own scraping infrastructure.&lt;/p&gt;

&lt;p&gt;Common integrations include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST API workflows&lt;/li&gt;
&lt;li&gt;AI agent systems&lt;/li&gt;
&lt;li&gt;RAG pipelines&lt;/li&gt;
&lt;li&gt;developer automation tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;SEO is moving from dashboards to intelligent systems.&lt;/p&gt;

&lt;p&gt;The next generation of SEO tools will not simply report:&lt;/p&gt;

&lt;p&gt;"Your ranking dropped."&lt;/p&gt;

&lt;p&gt;They will explain:&lt;/p&gt;

&lt;p&gt;"Your ranking dropped because three competitors changed their content strategy, search intent shifted, and these pages now satisfy Google's results better."&lt;/p&gt;

&lt;p&gt;That requires fresh data.&lt;/p&gt;

&lt;p&gt;The future of SEO is not only about collecting rankings.&lt;/p&gt;

&lt;p&gt;It is about building systems that understand search.&lt;/p&gt;

&lt;p&gt;For developers building AI agents, SEO SaaS products, or research applications, choosing the right SERP API infrastructure is becoming a critical technical decision.&lt;/p&gt;

&lt;p&gt;If you are exploring a &lt;strong&gt;DataForSEO alternative&lt;/strong&gt;, TalorData provides a developer-focused approach to accessing structured SERP data for modern applications.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;talordata.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I open-sourced a plugin that gives Hermes Agent real-time Google search</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Tue, 18 Aug 2026 02:45:13 +0000</pubDate>
      <link>https://dev.to/talor/i-open-sourced-a-plugin-that-gives-hermes-agent-real-time-google-search-3dgc</link>
      <guid>https://dev.to/talor/i-open-sourced-a-plugin-that-gives-hermes-agent-real-time-google-search-3dgc</guid>
      <description>&lt;p&gt;I build a SERP API. The most interesting question for me lately isn't "how do you scrape Google" — it's "how does my AI agent get live data when it needs it."&lt;/p&gt;

&lt;p&gt;AI agents are only as good as their context. And most agents today are stuck with stale training data or clunky search integrations that can't filter by location, language, or time.&lt;/p&gt;

&lt;p&gt;So I built an open-source plugin for &lt;a href="https://hermes-agent.nousresearch.com/" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; (from Nous Research) that plugs into my &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData SERP API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Replaces Hermes's &lt;code&gt;web_search&lt;/code&gt; backend with real Google SERP data&lt;/li&gt;
&lt;li&gt;Adds a &lt;code&gt;talor_google_search&lt;/code&gt; tool with the full parameter set: &lt;code&gt;device&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;google_domain&lt;/code&gt;, &lt;code&gt;tbm&lt;/code&gt; (images/news/shopping/videos/local/patents), &lt;code&gt;tbs&lt;/code&gt; time filters, pagination, &lt;code&gt;render_js&lt;/code&gt;, &lt;code&gt;ai_overview&lt;/code&gt;, &lt;code&gt;no_cache&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Returns only the fields Hermes needs — no giant raw payloads blowing up your context window&lt;/li&gt;
&lt;li&gt;One &lt;code&gt;TALOR_API_TOKEN&lt;/code&gt; for everything&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;macOS / Linux&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.hermes/hermes-agent
uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--python&lt;/span&gt; venv/bin/python &amp;lt;path-to-repo&amp;gt;
hermes plugins &lt;span class="nb"&gt;enable &lt;/span&gt;talor
hermes tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows (PowerShell)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="nx"&gt;\.hermes\hermes-agent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;path-to-repo&amp;gt;'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;hermes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;plugins&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;talor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just paste this into a Hermes chat and let it handle the setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install and configure talor-hermes-plugin by following the instructions at:
https://github.com/TalorData/talor-hermes-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two prompts worth trying right after install&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"Find the latest AI news. Use multiple focused news searches restricted to the past week, verify the leading stories against reputable or primary sources, and give me a concise dated briefing with source links."&lt;/li&gt;
&lt;li&gt;"Compare the current best budget Android phones in Germany. Search with German location and language settings, check at least three different retailers, and return a shortlist with prices and key specs."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Google engine is live today; Bing, Yandex, and DuckDuckGo are on the roadmap.&lt;/p&gt;

&lt;p&gt;If you find a bug or want another engine, open an issue or PR — it's all open source.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Talordata/talordata-hermes-plugin" rel="noopener noreferrer"&gt;Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.talordata.com/serp-api/integration/mcp-integration/hermes-agent-integration" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;Sign up for 500 free responses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>agents</category>
      <category>api</category>
    </item>
    <item>
      <title>Building AI Agents with Real-Time Search Grounding: How SERP APIs Enable Reliable LLM Applications</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Mon, 10 Aug 2026 06:09:20 +0000</pubDate>
      <link>https://dev.to/talor/building-ai-agents-with-real-time-search-grounding-how-serp-apis-enable-reliable-llm-applications-5173</link>
      <guid>https://dev.to/talor/building-ai-agents-with-real-time-search-grounding-how-serp-apis-enable-reliable-llm-applications-5173</guid>
      <description>&lt;p&gt;Large language models have changed how developers build applications.&lt;/p&gt;

&lt;p&gt;However, even the most advanced LLMs have one fundamental limitation:&lt;/p&gt;

&lt;p&gt;They do not have access to real-time information.&lt;/p&gt;

&lt;p&gt;A model may understand programming, reasoning, and language extremely well, but it cannot automatically know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Today's market changes&lt;/li&gt;
&lt;li&gt;Newly released software versions&lt;/li&gt;
&lt;li&gt;Current search trends&lt;/li&gt;
&lt;li&gt;Breaking news&lt;/li&gt;
&lt;li&gt;Real-time product information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For AI agents, this limitation becomes critical.&lt;/p&gt;

&lt;p&gt;An agent that can reason but cannot access fresh information is still limited.&lt;/p&gt;

&lt;p&gt;This is why grounding has become a core architecture pattern in modern AI systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  From LLMs to Grounded AI Agents
&lt;/h2&gt;

&lt;p&gt;A traditional LLM workflow looks like:&lt;/p&gt;

&lt;p&gt;User → LLM → Answer&lt;/p&gt;

&lt;p&gt;The problem is that the answer depends entirely on the model's existing knowledge.&lt;/p&gt;

&lt;p&gt;A grounded AI system introduces an external information layer:&lt;/p&gt;

&lt;p&gt;User&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;AI Agent&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Search / Retrieval Tool&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;External Data&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;LLM Reasoning&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Final Answer&lt;/p&gt;

&lt;p&gt;The model is no longer expected to remember everything.&lt;/p&gt;

&lt;p&gt;Instead, it retrieves relevant information and reasons over fresh data.&lt;/p&gt;

&lt;p&gt;This architecture powers many modern AI experiences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google AI Overviews&lt;/li&gt;
&lt;li&gt;Perplexity&lt;/li&gt;
&lt;li&gt;ChatGPT Search&lt;/li&gt;
&lt;li&gt;Enterprise AI assistants&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Search Is Becoming the Critical Layer for AI Agents
&lt;/h2&gt;

&lt;p&gt;Many developers initially think adding search means simply returning URLs.&lt;/p&gt;

&lt;p&gt;But AI agents need much more than a list of webpages.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;An AI research agent needs to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which sources are ranking&lt;/li&gt;
&lt;li&gt;What information appears in snippets&lt;/li&gt;
&lt;li&gt;How results differ by region&lt;/li&gt;
&lt;li&gt;Which content is considered relevant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An SEO intelligence tool needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ranking positions&lt;/li&gt;
&lt;li&gt;SERP features&lt;/li&gt;
&lt;li&gt;Competitor visibility&lt;/li&gt;
&lt;li&gt;Search trends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A RAG system needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean structured data&lt;/li&gt;
&lt;li&gt;Reliable retrieval results&lt;/li&gt;
&lt;li&gt;Consistent formats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where SERP APIs become important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Search API vs SERP API: Why the Difference Matters
&lt;/h2&gt;

&lt;p&gt;A traditional Search API focuses on retrieving webpages.&lt;/p&gt;

&lt;p&gt;The question it answers:&lt;/p&gt;

&lt;p&gt;"Which pages match this query?"&lt;/p&gt;

&lt;p&gt;A SERP API focuses on reproducing search engine result pages.&lt;/p&gt;

&lt;p&gt;The question becomes:&lt;/p&gt;

&lt;p&gt;"How does the search engine rank and organize information for this query?"&lt;/p&gt;

&lt;p&gt;This difference is important because search engines contain valuable ranking signals.&lt;/p&gt;

&lt;p&gt;A SERP response can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Organic results&lt;/li&gt;
&lt;li&gt;Featured snippets&lt;/li&gt;
&lt;li&gt;Knowledge panels&lt;/li&gt;
&lt;li&gt;News results&lt;/li&gt;
&lt;li&gt;Image results&lt;/li&gt;
&lt;li&gt;Shopping results&lt;/li&gt;
&lt;li&gt;Local results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For AI agents, these signals provide additional context before generating an answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData SERP API&lt;/a&gt; as the Search Grounding Layer
&lt;/h2&gt;

&lt;p&gt;Building a reliable search layer from scratch is difficult.&lt;/p&gt;

&lt;p&gt;A custom approach usually requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser automation&lt;/li&gt;
&lt;li&gt;Proxy infrastructure&lt;/li&gt;
&lt;li&gt;CAPTCHA handling&lt;/li&gt;
&lt;li&gt;HTML parsing&lt;/li&gt;
&lt;li&gt;Data normalization&lt;/li&gt;
&lt;li&gt;Continuous maintenance
For many AI teams, maintaining this infrastructure is not the core product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData SERP API&lt;/a&gt; can simplify the architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData&lt;/a&gt; provides structured SERP data from major search engines, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;Bing&lt;/li&gt;
&lt;li&gt;Yandex&lt;/li&gt;
&lt;li&gt;DuckDuckGo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of processing raw HTML, developers receive machine-readable JSON responses designed for application workflows.&lt;/p&gt;

&lt;p&gt;A typical AI agent workflow looks like:&lt;/p&gt;

&lt;p&gt;User Query&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;AI Agent (LangChain / LlamaIndex / Custom Agent)&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData SERP API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Structured JSON Search Results&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;LLM Context&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Generated Answer&lt;/p&gt;

&lt;p&gt;This allows developers to focus on building agent intelligence instead of maintaining scraping infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Adding Search Grounding to an AI Agent
&lt;/h2&gt;

&lt;p&gt;Without external search:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
LLM&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
Answer&lt;/p&gt;

&lt;p&gt;The model relies only on internal knowledge.&lt;/p&gt;

&lt;p&gt;With SERP grounding:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
AI Agent&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData SERP API&lt;/a&gt;&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
Structured Search Results&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
LLM&lt;br&gt;
 |&lt;br&gt;
 |&lt;br&gt;
Grounded Answer&lt;/p&gt;

&lt;p&gt;The model can now reason with current information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Structured JSON Matters for Agent Workflows
&lt;/h2&gt;

&lt;p&gt;AI systems work best with predictable data formats.&lt;/p&gt;

&lt;p&gt;Raw HTML pages introduce unnecessary complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracting useful content&lt;/li&gt;
&lt;li&gt;Removing irrelevant elements&lt;/li&gt;
&lt;li&gt;Handling different page structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured SERP data provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent fields&lt;/li&gt;
&lt;li&gt;Faster processing&lt;/li&gt;
&lt;li&gt;Easier integration&lt;/li&gt;
&lt;li&gt;Better control over retrieval pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it easier to connect search capabilities with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LangChain agents&lt;/li&gt;
&lt;li&gt;LlamaIndex workflows&lt;/li&gt;
&lt;li&gt;RAG applications&lt;/li&gt;
&lt;li&gt;AI research assistants&lt;/li&gt;
&lt;li&gt;Automation platforms like n8n and Dify&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future of AI Search Infrastructure
&lt;/h2&gt;

&lt;p&gt;The next generation of AI applications will not only compete on model intelligence.&lt;/p&gt;

&lt;p&gt;They will compete on information access.&lt;/p&gt;

&lt;p&gt;The winning AI systems will combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong reasoning models&lt;/li&gt;
&lt;li&gt;Real-time search&lt;/li&gt;
&lt;li&gt;Structured data pipelines&lt;/li&gt;
&lt;li&gt;Reliable retrieval systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Search is no longer just a feature.&lt;/p&gt;

&lt;p&gt;For AI agents, search is becoming infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AI agents need more than intelligence.&lt;/p&gt;

&lt;p&gt;They need access to the constantly changing web.&lt;/p&gt;

&lt;p&gt;Grounding provides the connection between LLMs and real-world information.&lt;/p&gt;

&lt;p&gt;SERP APIs like &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData&lt;/a&gt; make it easier for developers to build this connection without managing complex scraping systems.&lt;/p&gt;

&lt;p&gt;As AI applications move from prototypes to production, reliable search infrastructure will become one of the most important components in the AI stack.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>agents</category>
      <category>rag</category>
      <category>serpapi</category>
    </item>
    <item>
      <title>Google Custom Search API Is Changing in 2027: What Developers Should Use Instead</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Fri, 07 Aug 2026 07:45:46 +0000</pubDate>
      <link>https://dev.to/talor/google-custom-search-api-is-changing-in-2027-what-developers-should-use-instead-3hga</link>
      <guid>https://dev.to/talor/google-custom-search-api-is-changing-in-2027-what-developers-should-use-instead-3hga</guid>
      <description>&lt;p&gt;Google Custom Search JSON API has been a simple solution for developers who needed web search capabilities inside their applications.&lt;/p&gt;

&lt;p&gt;But the search infrastructure landscape is changing.&lt;/p&gt;

&lt;p&gt;With Google moving away from the legacy Custom Search API model, developers building AI agents, RAG systems, and automation tools need to rethink how they access search data.&lt;/p&gt;

&lt;p&gt;The biggest mistake is treating this as just an API migration problem.&lt;/p&gt;

&lt;p&gt;It is actually a data architecture problem.&lt;/p&gt;

&lt;p&gt;Traditional search APIs were designed for humans.&lt;/p&gt;

&lt;p&gt;A user searches for something, and the API returns a list of webpages.&lt;/p&gt;

&lt;p&gt;That works for simple applications.&lt;/p&gt;

&lt;p&gt;But AI applications need much more context.&lt;/p&gt;

&lt;p&gt;An AI agent does not only need URLs.&lt;/p&gt;

&lt;p&gt;It needs to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which pages rank for a query&lt;/li&gt;
&lt;li&gt;How search results are structured&lt;/li&gt;
&lt;li&gt;What competitors are visible&lt;/li&gt;
&lt;li&gt;How results change by country and language&lt;/li&gt;
&lt;li&gt;Whether images, news, shopping, or local results appear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where SERP APIs become important.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;SERP API&lt;/a&gt; provides structured search engine result data instead of just links.&lt;/p&gt;

&lt;p&gt;For AI applications, this means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better retrieval quality for RAG pipelines&lt;/li&gt;
&lt;li&gt;More reliable information for AI agents&lt;/li&gt;
&lt;li&gt;Easier SEO automation&lt;/li&gt;
&lt;li&gt;Real-time market intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future of search is not only about finding pages.&lt;/p&gt;

&lt;p&gt;It is about understanding how information is organized.&lt;/p&gt;

&lt;p&gt;For developers building AI-powered applications, structured search data is becoming a core infrastructure layer.&lt;/p&gt;

&lt;p&gt;Instead of maintaining scraping systems, proxy pools, and parsing logic, teams can focus on building products.&lt;/p&gt;

&lt;p&gt;The next generation of AI applications will need search infrastructure designed for machines, not only humans.&lt;/p&gt;

&lt;p&gt;Full technical breakdown:&lt;a href="https://www.talordata.com/blog/google-custom-search-api-alternative" rel="noopener noreferrer"&gt;https://www.talordata.com/blog/google-custom-search-api-alternative&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Legacy Google Search JSON API Is Dying. Here's Your Migration Guide.</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Thu, 06 Aug 2026 06:39:07 +0000</pubDate>
      <link>https://dev.to/talor/legacy-google-search-json-api-is-dying-heres-your-migration-guide-2gel</link>
      <guid>https://dev.to/talor/legacy-google-search-json-api-is-dying-heres-your-migration-guide-2gel</guid>
      <description>&lt;p&gt;If your production app relies on the legacy Google Custom Search JSON API, the clock is ticking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google is officially shutting down the endpoint on January 1, 2027.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you haven't migrated your data pipeline yet, your search infrastructure is about to hit a massive brick wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Google Custom Search JSON API Is Going Away
&lt;/h2&gt;

&lt;p&gt;For years, the Google Custom Search JSON API was the go‑to solution for developers who needed programmatic access to search results. It was simple, reliable, and officially supported.&lt;/p&gt;

&lt;p&gt;But Google is deprecating it. After January 1, 2027, the endpoint will stop responding. No more search results. No more data. Your pipelines will fail, and your applications will break.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is This Happening?
&lt;/h2&gt;

&lt;p&gt;Google is shifting its focus to newer, more controlled search access models — largely driven by the explosion of AI workloads and the need to manage how search data is consumed at scale. The legacy API simply wasn't built for the volume and speed that modern AI agents and RAG pipelines demand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Building Your Own Scraper
&lt;/h2&gt;

&lt;p&gt;If your first instinct is to "just scrape Google yourself" using Puppeteer or BeautifulSoup — don't.&lt;/p&gt;

&lt;p&gt;Here's what happens within minutes of deploying a raw scraper to production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Rate limiting — Your IP gets flagged after a few dozen requests.&lt;/li&gt;
&lt;li&gt;❌ CAPTCHAs — Every other request triggers a challenge you can't solve programmatically.&lt;/li&gt;
&lt;li&gt;❌ Blocked requests — Google detects headless browsers and returns 403 errors.&lt;/li&gt;
&lt;li&gt;❌ Maintenance nightmare — Google updates its HTML layout constantly. Your parser breaks. You fix it. It breaks again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You end up spending more time maintaining scraping infrastructure than building your actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2026 Solution: Decoupling Network and Parsing via &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;TalorData&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of fighting Google's anti‑bot systems, thousands of developers are migrating to &lt;strong&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;SERP API providers&lt;/a&gt;&lt;/strong&gt; — specialized infrastructure that handles proxy rotation, CAPTCHA solving, and parsing for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TalorData&lt;/strong&gt; is one of the fastest, most cost‑effective options available today. Here's how you can migrate your search pipeline in under 0.8 seconds using modern infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Migration Example (Python)
&lt;/h2&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_structured_serp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Migrating from legacy google-api-client to unified SERP infrastructure
&lt;/span&gt;    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.talordata.com/accounts/v1/serp/get_serp_data&lt;/span&gt;&lt;span class="sh"&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;Authorization&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;Bearer YOUR_API_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;params&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;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;engine&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;google&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;gl&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;us&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;hl&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;en&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;num&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&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;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Direct structured JSON output
&lt;/span&gt;    &lt;span class="p"&gt;}&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="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&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="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&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;# P90 response under 0.8s, perfectly clean and ready for your LLM or database!
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_structured_serp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevOps automation trends 2026&lt;/span&gt;&lt;span class="sh"&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;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What You Get with This Approach
&lt;/h2&gt;

&lt;p&gt;Requirement Raw Scraper TalorData SERP API&lt;br&gt;
Proxy management    ❌ You manage it   ✅ Built‑in residential proxies&lt;br&gt;
CAPTCHA solving ❌ You build it    ✅ Automated solvers&lt;br&gt;
HTML parsing    ❌ You maintain selectors  ✅ Clean JSON output&lt;br&gt;
Latency 2–4 seconds   P90 &amp;lt; 0.8s&lt;br&gt;
Billing Pay for failed requests Pay only on success&lt;br&gt;
Maintenance Full‑time job Zero maintenance&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Migration Actually Matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It's not just about keeping your pipeline alive.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Migrating to a modern SERP API unlocks capabilities that the legacy Google API never offered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi‑engine support — Google, Bing, Yandex, DuckDuckGo — all through one endpoint.&lt;/li&gt;
&lt;li&gt;Global localization — Simulate search results from 195+ countries, down to the city level.&lt;/li&gt;
&lt;li&gt;AI‑ready data — Structured JSON that your LLM or RAG pipeline can consume immediately.&lt;/li&gt;
&lt;li&gt;Scalable pricing — Pay only for successful requests. No wasted budget on failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Migration Checklist for Dev Teams
&lt;/h2&gt;

&lt;p&gt;□ Audit your current usage of the Google Custom Search JSON API&lt;br&gt;
□ Identify all pipelines and applications that depend on it&lt;br&gt;
□ Sign up for a SERP API provider (TalorData offers 500 free requests to test)&lt;br&gt;
□ Update your code to use the new API endpoint (see example above)&lt;br&gt;
□ Run parallel tests to validate data parity&lt;br&gt;
□ Deploy the new integration&lt;br&gt;
□ Decommission the legacy API calls before January 1, 2027&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Don't wait until December 31 to change your endpoints.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The legacy API is going away. Building your own scraper is a maintenance trap. Migrating to a modern SERP API like TalorData gives you faster responses, cleaner data, and zero infrastructure to manage — all while saving you money with pay‑per‑success billing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try TalorData today&lt;/strong&gt; — &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;500 free requests on sign‑up&lt;/a&gt;, no credit card required.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;talordata.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>webscraping</category>
      <category>devops</category>
      <category>api</category>
    </item>
    <item>
      <title>Building AI Search Applications After Bing Search API: A Developer's Guide</title>
      <dc:creator>talor</dc:creator>
      <pubDate>Tue, 04 Aug 2026 07:04:34 +0000</pubDate>
      <link>https://dev.to/talor/building-ai-search-applications-after-bing-search-api-a-developers-guide-334l</link>
      <guid>https://dev.to/talor/building-ai-search-applications-after-bing-search-api-a-developers-guide-334l</guid>
      <description>&lt;p&gt;The retirement or limitation of traditional search APIs has created a new challenge for developers building AI applications, search tools, and data-driven workflows.&lt;/p&gt;

&lt;p&gt;Many developers who previously relied on Bing Search API are now looking for a reliable &lt;strong&gt;&lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;Bing Search API alternative&lt;/a&gt;&lt;/strong&gt; that can provide structured search results without requiring them to build and maintain their own crawling infrastructure.&lt;/p&gt;

&lt;p&gt;However, replacing a search API is not only about finding another endpoint that returns URLs.&lt;/p&gt;

&lt;p&gt;Modern applications, especially AI agents and RAG systems, require richer search data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured search results&lt;/li&gt;
&lt;li&gt;Reliable ranking information&lt;/li&gt;
&lt;li&gt;Location and language targeting&lt;/li&gt;
&lt;li&gt;Multiple search engines support&lt;/li&gt;
&lt;li&gt;Machine-readable SERP data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why many developers are moving from traditional Search APIs toward SERP APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Developers Need a &lt;a href="https://talordata.com/?campaignid=G3ZIVDD0BufiRTtR&amp;amp;utm_source=devtalor&amp;amp;utm_term=devtalor" rel="noopener noreferrer"&gt;Bing Search API Alternative&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Traditional search APIs were designed mainly for retrieving information.&lt;/p&gt;

&lt;p&gt;A typical workflow was simple:&lt;/p&gt;

&lt;p&gt;User enters a query → API returns search results → Application displays results.&lt;/p&gt;

&lt;p&gt;This works well for basic search functions.&lt;/p&gt;

&lt;p&gt;However, modern AI applications require deeper context.&lt;/p&gt;

&lt;p&gt;For example, an AI research assistant may need to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which websites are ranking for a specific topic&lt;/li&gt;
&lt;li&gt;How search visibility changes over time&lt;/li&gt;
&lt;li&gt;What competitors are publishing&lt;/li&gt;
&lt;li&gt;Which sources are most relevant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A list of URLs is no longer enough.&lt;/p&gt;

&lt;p&gt;Applications need structured information about the search results page itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Search API vs SERP API: Understanding the Difference
&lt;/h2&gt;

&lt;p&gt;One common mistake is treating Search API and SERP API as the same thing.&lt;/p&gt;

&lt;p&gt;A Search API usually focuses on content retrieval.&lt;/p&gt;

&lt;p&gt;It answers:&lt;/p&gt;

&lt;p&gt;“Which pages are relevant to this query?”&lt;/p&gt;

&lt;p&gt;A SERP API focuses on search result intelligence.&lt;/p&gt;

&lt;p&gt;It answers:&lt;/p&gt;

&lt;p&gt;“How does the search engine organize and rank information for this query?”&lt;/p&gt;

&lt;p&gt;SERP APIs provide additional context such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ranking positions&lt;/li&gt;
&lt;li&gt;Organic results&lt;/li&gt;
&lt;li&gt;Search features&lt;/li&gt;
&lt;li&gt;Localized search results&lt;/li&gt;
&lt;li&gt;Device-specific results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This additional layer is important for applications that need analysis rather than simple retrieval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Structured SERP Data Matters for AI Applications
&lt;/h2&gt;

&lt;p&gt;AI systems depend heavily on external information quality.&lt;/p&gt;

&lt;p&gt;When an AI agent receives raw search results, it must spend additional processing power understanding the format and relationships between different sources.&lt;/p&gt;

&lt;p&gt;Structured SERP data simplifies this process.&lt;/p&gt;

&lt;p&gt;Instead of receiving disconnected pages, developers can work with organized search information:&lt;/p&gt;

&lt;p&gt;Search Query&lt;br&gt;
      ↓&lt;br&gt;
Search Engine&lt;br&gt;
      ↓&lt;br&gt;
SERP Results&lt;br&gt;
      ↓&lt;br&gt;
Ranking Data&lt;br&gt;
      ↓&lt;br&gt;
URLs and Content Signals&lt;/p&gt;

&lt;p&gt;This allows AI systems to perform more advanced tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated research&lt;/li&gt;
&lt;li&gt;SEO analysis&lt;/li&gt;
&lt;li&gt;Market monitoring&lt;/li&gt;
&lt;li&gt;Competitor tracking&lt;/li&gt;
&lt;li&gt;Content intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The value is not only accessing the web.&lt;/p&gt;

&lt;p&gt;The value is understanding how information is structured across the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should Developers Look for in a Search API Replacement?
&lt;/h2&gt;

&lt;p&gt;When choosing a Bing API replacement, developers should evaluate more than API availability.&lt;/p&gt;

&lt;p&gt;A reliable search infrastructure should provide:&lt;/p&gt;

&lt;h2&gt;
  
  
  Structured and consistent data
&lt;/h2&gt;

&lt;p&gt;Search results should be returned in a predictable format that applications can process automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexible targeting options
&lt;/h2&gt;

&lt;p&gt;Different applications may require different search environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Countries&lt;/li&gt;
&lt;li&gt;Languages&lt;/li&gt;
&lt;li&gt;Devices&lt;/li&gt;
&lt;li&gt;Search engines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scalability
&lt;/h2&gt;

&lt;p&gt;A solution that works for a prototype should also support production workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compatibility with modern AI workflows
&lt;/h2&gt;

&lt;p&gt;Search APIs are increasingly becoming a data layer for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;RAG pipelines&lt;/li&gt;
&lt;li&gt;Automated research systems&lt;/li&gt;
&lt;li&gt;Intelligent applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Moving From Search Retrieval to Search Intelligence
&lt;/h2&gt;

&lt;p&gt;The evolution from traditional search APIs to SERP APIs represents a larger shift in how developers use search data.&lt;/p&gt;

&lt;p&gt;Previously, search APIs helped applications find information.&lt;/p&gt;

&lt;p&gt;Today, developers need systems that help applications understand information.&lt;/p&gt;

&lt;p&gt;AI agents need real-time access to the external world.&lt;/p&gt;

&lt;p&gt;They need structured data that allows them to reason about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trends&lt;/li&gt;
&lt;li&gt;Rankings&lt;/li&gt;
&lt;li&gt;Competition&lt;/li&gt;
&lt;li&gt;User intent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why SERP API infrastructure is becoming increasingly important for modern applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Approach for Developers Migrating From Bing Search API
&lt;/h2&gt;

&lt;p&gt;For developers migrating from Bing Search API, the first step is identifying what your application actually needs.&lt;/p&gt;

&lt;p&gt;If your application only requires basic webpage retrieval, a simple search interface may be enough.&lt;/p&gt;

&lt;p&gt;But if you are building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI search assistants&lt;/li&gt;
&lt;li&gt;SEO platforms&lt;/li&gt;
&lt;li&gt;Research agents&lt;/li&gt;
&lt;li&gt;Data intelligence tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then structured SERP data provides much more flexibility.&lt;/p&gt;

&lt;p&gt;The goal is not simply replacing an API.&lt;/p&gt;

&lt;p&gt;The goal is building a stronger search data foundation for future applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Originally Published on TalorData Blog
&lt;/h2&gt;

&lt;p&gt;This article was originally published on the TalorData Blog, where we share insights about SERP APIs, AI search infrastructure, and developer tools.&lt;/p&gt;

</description>
      <category>bingsearchapi</category>
      <category>bingserpjson</category>
      <category>serpapi</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
