On job_extraction_done rows with job_count 0: machine-readable cause. One of dns_error, connection_error, blocked, http_error: (e.g. http_error:404), parked_domain, not_a_career_page, js_rendered_no_browser, js_rendered_browser_fallback, parse_error, no_jobs_found. On partial results (any job_count): company_time_budget (the per-company fair-share time budget ended the read), timeout_wind_down (the run deadline ended the read), aborted (user abort, migration or low memory) or charge_limit_reached (the run's maximum charge was hit); every row pushed before that point was charged. The company fee is charged once per company from the final reason, and only when the site was read; aborted, timeout_wind_down, charge_limit_reached and company_time_budget pay it only if job rows were delivered. ok when the company finished and rows were pushed. filtered_out_by_filters / no_location_match_on_site: listings were read but the keywords, location or date filters removed all of them (nothing to retry with a browser). js_rendered_no_browser is only used when no listings were seen at all. null when the read completed with no rows and no cause.