Jobs
A job is a single execution of a scrape using a strategy. Jobs run asynchronously in the background, extract data according to the strategy’s rules, and store the results for retrieval.What is a job?
When you create a job, Meter:- Fetches the target URL
- Applies the strategy’s extraction logic (CSS selectors)
- Extracts structured data
- Generates content signatures for change detection
- Stores results for retrieval
Job lifecycle
Job statuses:pending: Job is queued, waiting to startrunning: Job is currently executingcompleted: Job finished successfully, results availablefailed: Job encountered an error
Creating jobs
Basic job creation
Waiting for completion
Jobs run asynchronously. Usewait_for_job() to poll until completion:
With timeout
Set a timeout to avoid waiting forever:Checking job status
Poll job status manually:Job results
Completed jobs contain extracted data in theresults field:
Job metadata
Jobs also include metadata for change detection:content_hash: Hash of the extracted content for quick comparisonstructural_signature: Structural fingerprint for detecting layout changesitem_count: Number of items extracted
Listing jobs
All jobs
Filter by strategy
Filter by status
Comparing jobs
Compare two jobs to detect changes:Strategy history
Get a timeline of all jobs for a strategy:has_changes field indicates if content changed compared to the previous job.
Advanced features
The following features require feature gating. Contact [email protected] to request access.
Antibot bypass
Meter can handle antibot protection on pages that use common bot detection systems. When enabled for your account, jobs automatically attempt to bypass antibot measures when fetching pages. This is useful for scraping sites that use:- Cloudflare Bot Management
- PerimeterX
- DataDome
- Other common antibot solutions
LLM summary
Jobs can include an LLM-generated summary of the page content. This is useful for:- Quick content overviews without parsing full results
- Change detection at a semantic level
- Building RAG pipelines with scraped content
summary field with the AI-generated summary of the extracted content.
Best practices
Handle failures gracefully
Handle failures gracefully
Jobs can fail if websites are down, block requests, or change structure:
Set appropriate timeouts
Set appropriate timeouts
Different sites have different response times:
Clean up old jobs
Clean up old jobs
Jobs are stored indefinitely (during beta). For large-scale monitoring:
Job deletion is not yet implemented but is planned.
Use wait_for_job for simple cases
Use wait_for_job for simple cases
For one-off scrapes, For monitoring, use schedules instead of manually creating jobs.
wait_for_job() is convenient:Troubleshooting
Job stays in 'pending' forever
Job stays in 'pending' forever
Possible causes:
- High server load
- Job queue backlog
- Wait longer (jobs typically complete in 10-60 seconds)
- Check status manually:
client.get_job(job_id) - Contact support if stuck for >5 minutes
Job fails with 'selector not found'
Job fails with 'selector not found'
Cause: Website HTML structure changedSolution: Generate a new strategy:
Empty results
Empty results
Problem: Job completes but
results is emptyPossible causes:- Strategy selectors don’t match the page
- Page content is dynamically loaded (JavaScript)
- Regenerate strategy for the current page structure
- For JS-heavy sites, contact support (browser automation coming soon)
Next steps
Set Up Schedules
Automate job execution with recurring schedules
Change Detection
Learn how Meter detects content changes
Python SDK Reference
Explore all job methods
REST API Reference
View job endpoints in the REST API