Introducing the SerpApi Extract API: Fetch and parse any web page SerpApi launched the Extract API, a new engine that fetches any public web page and returns its contents as structured JSON or Markdown, including page metadata, headings, inline links, embedded media, tables, lists, and forms. The API, called with engine=extract and a url parameter, also returns full page text in plain or Markdown format and can crawl linked pages, targeting applications and AI agents that need more than search results. SerpApi already has APIs for retrieving search results from Google https://serpapi.com/search-api , Bing https://serpapi.com/bing-search-api , and other popular search engines, as well as APIs for fetching data from platforms like Amazon https://serpapi.com/amazon-search-api , Google Maps https://serpapi.com/google-maps-api , and the Apple App Store https://serpapi.com/apple-app-store . That's not always enough information for your application or AI agent, though. What if it needs to see the full page linked from a search result, check prices on other online stores, or fetch posts from niche web forums? We're excited to announce the Extract API https://serpapi.com/extract-api , a new engine for fetching any public web page as structured JSON or Markdown. It can parse the page's metadata, links, embedded media, lists, forms, tables, and other elements. The Extract API can also return the complete text of a given page, in either plain or Markdown format, and crawl any linked pages. Parse page contents and metadata To get started, all you need is a free SerpApi account https://serpapi.com/users/sign up and your API key https://serpapi.com/manage-api-key . Then you can request information about a page, using extract as the engine and your page as the url parameter: https://serpapi.com/search.json?engine=extract&url=https://wiki.archlinux.org/title/NVIDIA In the response, you get a page information object with the title, language, and other basic information: "page information": { "title": "NVIDIA - ArchWiki", "url": "https://wiki.archlinux.org/title/NVIDIA", "final url": "https://wiki.archlinux.org/title/NVIDIA", "language": "en", "charset": "UTF-8", "content size": 112079, "content length": 30100, "word count": 4098 } There's a list of all headings in the page, too: "headings": { "position": 1, "level": 2, "title": "Contents" }, { "position": 2, "level": 1, "title": "NVIDIA" }, { "position": 3, "level": 2, "title": "Installation" }, ... You also get the anchor text and URL for every inline link, including the API endpoints to search that page with another API request: "inline links": { "position": 1, "link": "https://archlinux.org/", "displayed link": "archlinux.org", "internal": false, "serpapi extract link": "http://serpapi.com/search.json?device=desktop&engine=extract&url=https%3A%2F%2Farchlinux.org%2F" }, { "position": 2, "title": "Packages", "link": "https://archlinux.org/packages/", "displayed link": "archlinux.org", "internal": false, "serpapi extract link": "http://serpapi.com/search.json?device=desktop&engine=extract&url=https%3A%2F%2Farchlinux.org%2Fpackages%2F" }, { "position": 3, "title": "Forums", "link": "https://bbs.archlinux.org/", "displayed link": "bbs.archlinux.org", "internal": false, "serpapi extract link": "http://serpapi.com/search.json?device=desktop&engine=extract&url=https%3A%2F%2Fbbs.archlinux.org%2F" }, ... There's also a list of every embedded image, video, or audio file: "inline images": { "position": 1, "source": "https://wiki.archlinux.org/images/4/4e/View-refresh-red.svg", "width": 48, "height": 48 }, { "position": 2, "source": "https://wiki.archlinux.org/images/4/4e/View-refresh-red.svg", "width": 48, "height": 48 }, { "position": 3, "source": "https://wiki.archlinux.org/images/4/4e/View-refresh-red.svg", "width": 48, "height": 48 }, ... The response includes every table in the parsed page as well: "tables": { "position": 1, "headers": "GPU family", "Driver", "Status" , "rows": "GPU family", "Driver", "Status" , "Blackwell GBXXX and newer", "nvidia-open for linux nvidia-open-lts for linux-lts nvidia-open-dkms for any kernel s ", "Recommended by upstream Current, supported1" , "Ada Lovelace NV190/ADXXX Ampere NV170/GAXXX Turing NV160/TUXXX ", "nvidia-open for linux possible crashes on Ampere-equipped laptops2 nvidia-open-lts for linux-lts nvidia-open-dkms for any kernel s or nvidia-580xx-dkmsAUR proprietary ", "Supported" , "Volta NV140/GV100 Pascal NV130/GPXXX Maxwell NV110/GMXXX ", "nvidia-580xx-dkmsAUR", "Legacy, supported" , "Kepler NVE0/GKXXX ", "nvidia-470xx-dkmsAUR", "Legacy, unsupported3,4" , "Fermi NVC0/GF1XX ", "nvidia-390xx-dkmsAUR" , "Tesla NV50/G80-90-GT2XX ", "nvidia-340xx-dkmsAUR" , "Curie NV40/G70 and older", "No longer packaged" }, Finally, the response can also include each text section and web form, and all of the page's text. A version of the page rendered as Markdown is also available when you set include markdown to true . Keep in mind, that's a separate option from retrieving the full API response in Markdown format https://serpapi.com/markdown-output . For more details and all the supported settings, check out the Extract API documentation https://serpapi.com/extract-api . You can also test it out in the Playground https://serpapi.com/playground?engine=extract . The all-in-one web search solution If you combine the Extract API with SerpApi's existing web search engines, your application, automation, or AI agent can perform web searches and view the pages behind each result. They aren't limited to the contents of the result's title or snippet, the Knowledge Graph card https://serpapi.com/blog/how-to-find-google-knowledge-graph-id-kgmid/ , or the AI Overview. The best part is that all engines at SerpApi use the same account system, libraries and integrations, and search credits. You don't need to combine two or more separate services to get the job done. If you request a URL that already has a supported engine in SerpApi, like a YouTube video https://serpapi.com/youtube-video-api or Amazon product https://serpapi.com/amazon-product-results , the response will automatically use that engine's API. Let's say you're doing search engine optimization SEO research, and you want to check the general structure for each page ranking at the top of a certain keyword. Here's how you could use SerpApi's JavaScript library https://serpapi.com/integrations/javascript in a Node.js project to fetch the top five results, and then display each page's title and complete list of section headings: js import { getJson } from 'serpapi'; let googleSettings = { engine: "google light", api key: YOUR KEY GOES HERE, q: "best bluetooth headphones 2026", hl: "en", gl: "us" } let extractSettings = { engine: "extract", api key: YOUR KEY GOES HERE } let search = await getJson googleSettings ; for let result of search.organic results { extractSettings.url = result.link; let page = await getJson extractSettings ; // Check if the page couldn't be parsed if page.error { console.log \n${result.title}\n ${result.link} \n======\nError: ${page.error} ; continue; } // Show information for this page const title = page?.page information?.title || page?.title; const url = page?.page information?.final url || page?.title; console.log \n${title}\n ${url} \n====== ; if page?.headings { for let heading of page?.headings { console.log " ".repeat heading.level - 1 + heading.title ; } } else { console.log "No headings detected." } } The output for that script might look like this: Best Noise Cancelling Headphones 2026 50+ Tested https://recordingnow.com/blog/best-noise-cancelling-headphones/ ====== Best Noise Cancelling Headphones 2026 50+ Tested This article will cover the following categories: Best Comfort: Bose QuietComfort Ultra 2nd Gen Best for Movies / TV / Gaming: Sony 1000X THE COLLEXION Runner Up 1: Sony WH-1000XM6 Runner Up 2: AirPods Max 2 Best Headphones for Bass: Sennheiser Momentum 5 See our Full Sennheiser Momentum 5 Review on YouTube below Runner Up 1: Sennheiser Momentum 4 Runner Up 2: Nothing Headphone 1 Runner Up 3: Skullcandy Crusher ANC 2 The 6 Best Headphones of 2026 - RTINGS.com https://www.rtings.com/headphones/reviews/best/headphones ====== Video: The Real Reason TVs Are So Cheap Now Best Headphones Best Noise Cancelling Headphones Best Wireless Earbuds Best Noise Cancelling Earbuds 2026 Best Headphones 👑 Overall Winners — Aaron x Loud and Wireless https://www.loudnwireless.com/blog/2026-best-headphones-overall-winners ====== 2026 Best Headphones 👑 Overall Winners Sony WH-1000XM6 Bose QC Ultra Headphones Gen 2 You could also save the entire contents of each page, either as the original HTML code, with output=html , or as a plain text string, using text content.full in the JSON response. If you set include markdown to true in your API request, you can also get the page converted to Markdown. By combining the Extract API with our engines for Google, Bing, DuckDuckGo, Yahoo, and other search providers, you can solve problems that require browsing the web, instead of just searching the web. Crawl entire domains The Extract API can also be used to crawl entire websites, making it an excellent tool for web archival, e-commerce, competitive analysis, and much more. The Map Mode https://serpapi.com/extract-map-mode gives you a list of all discovered URLs for a domain, which you can then use with the regular page extraction, or use with Crawl Mode https://serpapi.com/extract-crawl-mode to automatically fetch all connected pages in one request. You might want an automation that checks the prices for all products on a store, or all products in a certain category. This example will use the Wi-Fi products on UniFi's online store https://store.ui.com/us/en/category/all-wifi . First, you can use SerpApi JavaScript library https://serpapi.com/integrations/javascript to generate a URL map of all products from that category page, and filter out the results that aren't product pages: js // import { getJson } from 'serpapi'; let search = await getJson { engine: "extract", api key: YOUR KEY GOES HERE, url: "https://store.ui.com/us/en/category/all-wifi", mode: "map", max pages: 50 } ; let productUrls = ; for let result of search.urls { if result.url.includes "/products/" { productUrls.push result.url ; } } Next, you can send an Extract API request for each product URL. This website includes product information in a JSON-LD object https://json-ld.org/ , which the Extract API includes as json ld in the result. This will read the JSON-LD objects for each page, including the variations of each product, and display its information: js for let product of productUrls { let thisPage = await getJson { engine: "extract", api key: YOUR KEY GOES HERE, url: product } // Get all product options if there are multiple variants const productOptions = thisPage?.json ld?. 0 ?.hasVariant || thisPage?.json ld || ; // Display each product's name and price for let option of productOptions { console.log ${option.name} - $${option?.offers?.priceSpecification?.price}\n======\n${option?.description}\n ; } } The script would output something like this: php UniFi Express 7 / US Version / 2-Pack - $379 ====== Mesh-scalable, super-compact 10G Cloud Gateway with integrated 6 GHz WiFi 7. Plug-and-play Whole-Home WiFi with true 10G Multi-Link Operation, intelligent placement guidance, and effortless mesh expansion with additional nodes. UniFi Express 7 / US Version / Single Unit - $199 ====== Mesh-scalable, super-compact 10G Cloud Gateway with integrated 6 GHz WiFi 7. Plug-and-play Whole-Home WiFi with true 10G Multi-Link Operation, intelligent placement guidance, and effortless mesh expansion with additional nodes. Access Point E7 - $499 ====== Enterprise-grade indoor access point with 10-stream WiFi 7 performance, a 10 GbE uplink, and a redundant GbE port for high availability. The exact method of extracting prices will depend on the store, and how the Extract API is able to parse its contents. In some cases, you might be able to parse the price from the text output of the main page or category page, or with the Price Offers normalized output https://serpapi.com/extract-price-offers . Perfect for agents SerpApi's MCP server https://serpapi.com/integrations/mcp , CLI application https://serpapi.com/integrations/cli , regular GET requests, and other official integrations https://serpapi.com/integrations already give AI agents the ability to search the web and read the results. With the Extract API, they can also fetch the actual pages behind each result, giving them even more context to accomplish tasks and answer questions. The Extract API provides a response in JSON format by default, but you can switch it to Markdown output https://serpapi.com/markdown-output , just like all of our other engine APIs. The output contains all the same important information, but with reduced token usage. Page Information - Title: NVIDIA - ArchWiki - Url: https://wiki.archlinux.org/title/NVIDIA - Final Url: https://wiki.archlinux.org/title/NVIDIA - Language: en - Charset: UTF-8 - Content Size: 112077 - Content Length: 30100 - Word Count: 4098 ... Inline Links | Position | Internal | Title | Rel | | --- | --- | --- | --- | | 1 | false | https://archlinux.org/ | | | 2 | false | Packages https://archlinux.org/packages/ | | | 3 | false | Forums https://bbs.archlinux.org/ | | | 4 | true | Wiki https://wiki.archlinux.org/ | | ... The possibilities are endless, especially when using the Extract API in conjunction with the other APIs provided by SerpApi. Ethical crawling and scraping The Extract API follows the robots.txt industry standard https://developers.google.com/search/docs/crawling-indexing/robots/intro for managing web crawlers, using the serpapi user agent. If a website already blocks certain pages or entire domains from all crawlers using a User-agent: rule, the Extract API will not parse those pages. If a website wants to explicitly block the Extract API, while still allowing other web crawlers, these lines can be added to the robots.txt file: User-agent: serpapi Disallow: / Map Mode leaves out disallowed URLs and sitemaps, and Crawl Mode doesn't follow disallowed links. Try it today The Extract API is now available for all SerpApi users. You can create an account https://serpapi.com/users/sign up to receive 250 free search credits each month, which can be used with any of our engine APIs. For more information about the Extract API, check out the full documentation https://serpapi.com/extract-api , and try it out in our Playground environment https://serpapi.com/playground?engine=extract .