TheDocumentation Index
Fetch the complete documentation index at: https://docs.zenrows.com/llms.txt
Use this file to discover all available pages before exploring further.
outputs parameter lets you specify exactly which data types to extract from a scraped page. Instead of parsing raw HTML yourself, ZenRows does the extraction for you and returns a clean, structured JSON response.
This is useful when you only need specific elements (like emails, links, or headings) and want to skip the overhead of processing full HTML responses.
Available filters
emails
emails
example@example.com as well as obfuscated versions like example[at]example.com and support at support dot com.Example: outputs=emailsphone_numbers
phone_numbers
tel: protocol links and applying regular expressions to detect common formats.Example: outputs=phone_numbersheadings
headings
h1 through h6 elements, giving you a quick structural outline of the page.Example: outputs=headingsimages
images
img tags. Only the src attribute is returned.Example: outputs=imagesaudios
audios
source elements nested inside audio tags. Only the src attribute is returned.Example: outputs=audiosvideos
videos
source elements nested inside video tags. Only the src attribute is returned.Example: outputs=videoslinks
links
a tags on the page. Only the href attribute is returned.Example: outputs=linksmenus
menus
hashtags
hashtags
metadata
metadata
name and content attributes from meta tags in the head section. Each entry is returned in name: content format.Example: outputs=metadatatables
tables
table elements and returns it as structured JSON, including the table dimensions, column headings, and row content.Example: outputs=tablesfavicon
favicon
link element in the head section.Example: outputs=faviconWhen to use output filters
Output filters are the right choice when you know exactly which data types you need and don’t want to deal with raw HTML. They’re particularly well-suited for:- Lead generation and outreach — use
emailsandphone_numbersto collect contact information from directories, company pages, or listings. - SEO and content audits — combine
headings,metadata,links, andfaviconto analyze page structure and on-page signals across multiple URLs. - E-commerce and media monitoring — use
images,videos, andtablesto track product listings, pricing tables, or media assets. - Social and community research — use
hashtagsto monitor trending topics or branded tags across public pages. - Navigation and site mapping — use
menusandlinksto map out a site’s structure without scraping full page content.
js_render=true alongside your outputs parameter.Best practices
Only request what you need:Each filter adds a small processing overhead. Requesting
outputs=* is convenient during exploration, but in production you should specify only the filters relevant to your use case.
Combine filters in a single request: You can pass multiple filters as a comma-separated list (
outputs=emails,links,metadata) rather than making separate requests. This keeps your credit usage efficient.
Use js_render for dynamic content: If a page loads its content via JavaScript (single-page apps, lazy-loaded sections), the filters will only capture what’s present in the initial HTML unless you also pass
js_render=true.
Use wait or wait_for for delayed content: If the content is loaded after a delay or via JavaScript, use
wait or wait_for to wait for the content to load before extracting it.
Validate output shape before parsing: Some filters return a flat array (like
emails or links) while others return structured objects (like tables). Check the response shape for each filter before building your parser.
Handle empty results gracefully: If a filter finds no matching elements on the page, it returns an empty array. Credits are still charged for any request that returns a
200 status code, regardless of whether the filters matched anything. Make sure your pipeline verifies that the target page actually contains the data you need before running it at scale.
Troubleshooting
The response is empty or missing expected data
The response is empty or missing expected data
js_render=true to your request to render the page before extraction. If the data still doesn’t appear, inspect the raw HTML response first (without outputs) to confirm the elements are present in the DOM.Also, enable js_render=true and wait or wait_for to wait for the content to load before extracting it. You can find more details on our Troubleshooting Partial or Empty Responses guide.emails returns obfuscated or partial addresses
emails returns obfuscated or partial addresses
[at] and at domain dot com, but some sites use custom JavaScript-based obfuscation that only resolves after rendering. Enable js_render=true to capture those cases. If the email is injected purely via client-side script with no HTML representation, it may not be extractable with output filters alone.tables returns unexpected or malformed data
tables returns unexpected or malformed data
tables filter targets standard HTML table elements. If the site renders its tables as div grids or uses CSS to simulate table layout, the filter won’t pick them up. In that case, use css_extractor with a custom CSS selector instead.links includes relative or irrelevant URLs
links includes relative or irrelevant URLs
links filter returns all href values from a tags as-is, including relative paths, anchor links (#section), and mailto: links. Filter the results in your own code to keep only the URLs relevant to your use case.menus returns an empty array on a page that clearly has navigation
menus returns an empty array on a page that clearly has navigation
Pricing
Theautoparse=true parameter is included at no additional cost with all ZenRows requests. You only pay extra for JavaScript Render and Premium Proxy when used.
FAQ (Frequently Asked Questions)
Can I use output filters alongside other parameters like js_render or premium_proxy?
Can I use output filters alongside other parameters like js_render or premium_proxy?
Do output filters count as additional credits?
Do output filters count as additional credits?
outputs parameter does not add extra credit cost. You pay the same credit rate as a standard request for that URL, regardless of how many filters you include.What happens if I request a filter and the page has no matching elements?
What happens if I request a filter and the page has no matching elements?
200 response, not on whether the filters returned data. If you’re running filters at scale, validate that the target pages actually contain the elements you’re looking for before sending large batches.Can I use outputs=* in production?
Can I use outputs=* in production?
outputs=* during development to explore what’s available, then narrow it down to the specific filters your use case requires before going to production.Do output filters work with the Scraping Browser?
Do output filters work with the Scraping Browser?
Is there a limit to how many filters I can combine in one request?
Is there a limit to how many filters I can combine in one request?
outputs=* or by listing them individually. In practice, the response size grows with each filter, so only request what you actually need.