urlscan.io API
urlscan.io API
urlscan.io exposes JSON APIs to search community website scans, submit URLs for sandboxed scanning and retrieve result metadata, screenshots or DOM snapshots; result fields include the tasked URL, UUID, visibility, page IP and domain, requests, certificates, hashes, technologies, statistics and verdicts. An account and API key are the supported path, while unauthenticated calls receive only minor quotas.
Coverage
The dataset consists of community and automated-pipeline website scans, so it is not a complete crawl and visibility settings affect what can be searched. Search history depends on retained scans; results can be deleted at any time, and a submitted scan takes at least 30 seconds and sometimes longer. Free quotas vary by account and action and are exposed in account pages, quota endpoints and response headers rather than as one public fixed allowance.
Verdict
This is defensive web-sandbox data for phishing triage, infrastructure pivots and observing what a submitted page loaded. A scan is a point-in-time execution, community coverage is selective, verdicts can be wrong, and scans or artifacts may disappear. Public submission can expose the URL and resulting data to the community and partners, so do not submit secrets or URLs without permission. Do not visit or fetch URLs or hosts returned by search results; retrieve only urlscan's own API metadata and artifacts.
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Search urlscan.io metadata into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.
Access
- Create a free urlscan.io account and store the API key in URLSCAN_API_KEY.
- This example searches existing metadata for example.com; it does not submit a URL for scanning or visit any returned site.
Request
curl -H "API-Key: $URLSCAN_API_KEY" --get --data-urlencode 'q=page.domain:example.com' --data-urlencode 'size=100' 'https://urlscan.io/api/v1/search/'Format
JSON search response with a results array; each result can include task time, URL, UUID and visibility, page domain and IP, scan statistics and nested verdict summaries.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""Search existing urlscan.io scan metadata -> pandas -> Parquet. Requires URLSCAN_API_KEY."""
import os
import requests
import pandas as pd
URL = "https://urlscan.io/api/v1/search/"
headers = {"API-Key": os.environ["URLSCAN_API_KEY"]}
params = {"q": "page.domain:example.com", "size": 100}
r = requests.get(URL, headers=headers, params=params, timeout=30)
r.raise_for_status()
results = r.json().get("results", [])
df = pd.json_normalize(results, sep=".")
if "task.time" in df.columns:
df["task.time"] = pd.to_datetime(df["task.time"], utc=True, errors="coerce")
df.to_parquet("urlscan_example_com_search.parquet", index=False)
print(len(df), "scan records", "columns", len(df.columns))Not run: it needs a free API key.
Limits
- Free quotas are account- and action-specific and apply per minute, hour and day.
- Only HTTP 200 responses count against quota; HTTP 429 means the action limit was exceeded.
- Search results and scan artifacts may be deleted at any time.
Quirks
- Search uses Elasticsearch query-string syntax and field names are case-sensitive; escape reserved characters.
- A submitted scan initially returns 404 while processing and can later return 410 if deleted.
- Keep result URLs as data. Do not request returned third-party URLs or hosts.
Terms and attribution
- Free community use is personal and non-commercial; commercial use requires permission or commercial terms.
- Submit only URLs you have permission to scan, and expect submitted data to be shared with the community and partners.
- Respect the action-specific quotas and implement backoff.
Sources
- https://docs.urlscan.io/pages/api-intro: “Our APIs allow you to submit URLs for scanning and to retrieve the results once the scan has finished.”
- https://docs.urlscan.io/pages/api-rate-limits: “There are separate limits per minute, per hour, and per day for each action.”
- https://docs.urlscan.io/pages/result-api-reference: “The Result API allows retrieving the metadata generated by each scan.”
- https://urlscan.io/terms/: “Commercial use of any part of our service requires express written permission.”
Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer