Skip to main content
Websets is an asynchronous search system that finds, verifies, and enriches web results against your criteria. It handles complex multi-step queries that would take hours manually — but getting the most out of it requires understanding how to write good queries, criteria, and enrichments. Recommended: Try our Coding Agent Quickstart — get a working webset in under a minute, then come back here for the full reference.

Key Benefits

  • Automated verification: Every result is checked against your criteria before becoming an item — no manual filtering needed.
  • Structured enrichments: Extract specific data points (names, emails, URLs, numbers) from each result using web research, not just page scraping.
  • Real-time updates: Use webhooks and monitors to keep websets continuously updated without polling.

Writing Good Queries

The query drives search behavior. Be specific and descriptive, natural language works well for most queries. Avoid vague queries like “interesting companies” or “good articles” — these produce noisy results that waste verification tokens. Include URLs for context: Any URL in the query will be crawled and used as additional context for the search. Use this when you want results similar to a specific page.

Writing Effective Criteria

Criteria determine whether a search result becomes an item. Each result is verified against every criterion — only results matching all criteria are kept. Keep criteria verifiable. Each criterion should be something that can be confirmed from publicly available web content.
Avoid subjective criteria like “Company is innovative” or “Company has a good culture” — these are hard to verify and produce inconsistent results. Use 1-3 criteria for best results. More criteria means stricter filtering, which can reduce item count significantly. Start with fewer criteria and add more if you’re getting too many irrelevant results. Check successRate on search responses to see what percentage of evaluated items matched each criterion. A very low success rate might indicate an overly strict or ambiguous criterion.

Choosing Entity Types

The entity field shapes how results are found and structured. Auto-detection works well in most cases, but explicit types give you more control.

Designing Enrichments

Enrichments extract additional data from each item using web research. Think of them as questions Websets answers for every result. Be specific about what you want. Vague enrichments produce vague results. Choose the right format to get structured output: Use options for classification tasks — it’s more reliable than asking for freeform text when you have a known set of categories:
Limit to 5-7 enrichments per webset. Each enrichment runs web research for every item, so more enrichments means longer processing time. Prioritize the data points you actually need.

Async Patterns

Websets are asynchronous — results arrive over time as searches complete and enrichments process. Use wait_until_idle in SDKs for simple workflows:
Use webhooks for production systems — they’re more reliable than polling and give you real-time updates:
  • webset.item.created — fires as each item passes verification (stream results as they arrive)
  • webset.item.enriched — fires when an enrichment result is ready for an item
  • webset.idle — fires when all searches and enrichments complete
The URL must be the final destination. Redirects (3xx responses) are not followed — if your endpoint redirects, the delivery will fail. Always register the URL that directly handles the webhook payload. Items are available immediately. You can list items while the webset is still running — you don’t have to wait for idle.

Idempotency and Deduplication

Use externalId to prevent duplicate websets. If you create a webset with an externalId that already exists, you’ll get a 409 error instead of a duplicate. You can then use externalId in place of id for all API calls.

Monitors for Recurring Searches

Monitors run searches on a schedule to keep websets updated with fresh results.
Monitor cron triggers at most once per day — this is a system constraint. Use "behavior": "append" in monitor searches to add new items without removing existing ones. Use "override" to re-evaluate existing items against new criteria.

Imports for Your Own Data

Imports let you bring URLs from your own sources (CRM exports, spreadsheets, etc.) and run enrichments on them:
This is useful when you already have a list of targets and want to enrich them with additional data, rather than discovering new results.

Common Patterns

Lead Generation Pipeline

Competitive Intelligence

Tips

  • Enrichment results are always arrays. Even for single values, result is ["value"] or null if not found.
  • Enrichment results have enrichmentId, not description. Build a map from webset.enrichments to resolve IDs to descriptions: {e.id: e.description for e in webset.enrichments}.
  • Item data is nested under properties. Access item.properties.url, item.properties.company.name — not item.url.
  • expand=items saves a call. GET /websets/{id}?expand=items returns the webset and its latest 100 items in one request.
  • Webhook secrets are shown once. Store the secret from the create response immediately for signature verification.
  • Preview before committing. Use POST /websets/preview to test a query without creating a webset.
Last modified on May 28, 2026