Skip to main content

Get Job Results (Blocking)

GET/api/v1/jobs/spiderMaps/campaigns/{campaign_id}/jobs/{job_id}/results

Overview

v2.16.0 Feature (updated v2.27.6): This endpoint blocks until all workflow stages complete for a specific SpiderMaps job, then returns aggregated results from all three services (SpiderMaps + SpiderSite + SpiderVerify).

Unlike /workflow-results which returns results for the entire campaign grouped by location, this endpoint focuses on a single job and returns ALL businesses from that job with their complete workflow data.

info

Blocking Behavior: By default, this endpoint waits until all businesses in the job complete processing (or timeout). Use wait=false to poll for current status instead.

tip

Use Case: Perfect for n8n/Xano webhooks or real-time integrations where you need to wait for results before proceeding to the next step.

Path Parameters

campaign_idstringrequired

The campaign ID returned from the submit endpoint (e.g., "camp_lu_restaurants_20251223_abc123")

job_idstringrequired

The SpiderMaps job UUID returned from the /next endpoint

Query Parameters

waitbooleandefault: true

Controls blocking behavior:

  • true (default): Block until all workflow stages complete or timeout
  • false: Return current status immediately (for polling)

Timeouts

StageTimeoutDescription
SpiderSite5 minutesPer-business website crawling timeout
SpiderVerify2 minutesPer-business email verification timeout
Maximum10 minutesAbsolute maximum wait time

If a timeout occurs, the endpoint returns a partial status with all available data collected up to that point.

Response

successboolean

Whether the job processed without errors. A job with 0 results is still considered successful.

has_resultsboolean

v2.27.6: Whether businesses_total > 0. Use this for automation filtering to quickly skip empty locations.

job_idstring

The SpiderMaps job UUID

campaign_idstring

The campaign identifier

statusstring

Current job status: queued, processing, completed, completed_with_errors, failed, partial

progressobject

Progress information (included while processing)

businesses_totalinteger

Total number of businesses in this job

businesses_with_domainsinteger

Businesses with valid website domains (not filtered)

businesses_filteredinteger

Businesses filtered out (social media, review sites, etc.)

spidersite_completedinteger

Number of SpiderSite jobs completed

spidersite_failedinteger

Number of SpiderSite jobs failed

spiderverify_completedinteger

Number of SpiderVerify jobs completed

spiderverify_failedinteger

Number of SpiderVerify jobs failed

total_emails_foundinteger

Total emails extracted from websites

total_valid_emailsinteger

Total emails confirmed as valid/deliverable

businessesarray

Array of all businesses with complete workflow data

processing_time_secondsnumber

Total time spent processing (or waiting)

spidersite_timed_outboolean

Whether SpiderSite timed out for any business

spiderverify_timed_outboolean

Whether SpiderVerify timed out for any business

error_messagestring

Error message if the job failed

Status Values

StatusDescription
queuedJob is waiting for workers to pick it up
processingWorkflow stages are currently running
completedAll workflow stages finished successfully
completed_with_errorsSome workflow jobs failed but useful data was collected
failedProcessing failed (check error_message)
partialTimeout occurred but partial data is available

Response Field Logic (v2.27.6)

Scenariosuccesshas_resultsstatus
100 businesses, all OKtruetruecompleted
100 businesses, 3 failedtruetruecompleted_with_errors
0 businesses foundtruefalsecompleted
SpiderMaps job failedfalsefalsefailed
Still processingfalsefalseprocessing
tip

Automation Tip: Use has_results to quickly filter out empty locations:

if (response.has_results) {
// Process businesses
} else {
// Skip - no data for this location
}

Examples

# Wait for job completion (blocks up to 10 minutes)
curl -X GET "https://spideriq.ai/api/v1/jobs/spiderMaps/campaigns/camp_lu_restaurants_20251223_abc123/jobs/79719220-6309-4742-9850-adb988b5dd4a/results" \
-H "Authorization: Bearer <your_token>"

Completed Response (with results):

{
"success": true,
"has_results": true,
"job_id": "79719220-6309-4742-9850-adb988b5dd4a",
"campaign_id": "camp_lu_restaurants_20251223_abc123",
"status": "completed",
"businesses_total": 100,
"businesses_with_domains": 69,
"businesses_filtered": 4,
"spidersite_completed": 69,
"spidersite_failed": 0,
"spiderverify_completed": 43,
"spiderverify_failed": 0,
"total_emails_found": 201,
"total_valid_emails": 8,
"businesses": [
{
"business_name": "Café des Tramways",
"business_place_id": "0x47954f2add89aa79:0x74c726ae28575bec",
"business_address": "79 Av. Pasteur, 2311 Luxembourg",
"business_phone": "35226201136",
"business_rating": 4.4,
"business_website": "http://www.cafedestramways.lu/",
"domain_filtered": false,
"filter_reason": null,
"spidersite_status": "completed",
"pages_crawled": 2,
"emails_found": ["info@cafedestramways.lu"],
"phones_found": [],
"social_media": {},
"company_info": {
"industry": "Restaurant/Bar",
"key_services": ["Flammekueches", "Burgers", "Cocktails"],
"target_audience": "Locals and tourists in Luxembourg"
},
"team_members": [],
"compendium": {
"available": true,
"chars": 3200,
"cleanup_level": "fit",
"storage_location": "spidermedia",
"download_url": "https://media.spideriq.ai/client-xxx/compendiums/job-uuid-1.md",
"filename": "compendiums/job-uuid-1.md",
"size_bytes": 3200,
"content_hash": "abc123...",
"estimated_tokens": 800
},
"spiderverify_status": "completed",
"emails_verified": [
{
"email": "info@cafedestramways.lu",
"status": "risky",
"score": 90,
"is_deliverable": true,
"is_free_email": false,
"is_disposable": false,
"is_role_account": true
}
],
"valid_emails_count": 0,
"spidersite_error": null,
"spiderverify_error": null
},
{
"business_name": "Glacier Bargello",
"business_place_id": "0x479548d196113821:0x6be5b2fd9b7d473f",
"business_address": "13 Rue du Fort Elisabeth, 1463 Luxembourg",
"business_phone": "35226296097",
"business_rating": 4.7,
"business_website": "http://www.bargello.lu/",
"domain_filtered": false,
"filter_reason": null,
"spidersite_status": "completed",
"pages_crawled": 3,
"emails_found": ["gelato@bargello.lu"],
"phones_found": [],
"social_media": {},
"company_info": {},
"team_members": [],
"compendium": {
"available": true,
"chars": 2100,
"cleanup_level": "fit",
"storage_location": "spidermedia",
"download_url": "https://media.spideriq.ai/client-xxx/compendiums/job-uuid-2.md",
"filename": "compendiums/job-uuid-2.md",
"size_bytes": 2100,
"content_hash": "def456...",
"estimated_tokens": 525
},
"spiderverify_status": "completed",
"emails_verified": [
{
"email": "gelato@bargello.lu",
"status": "valid",
"score": 100,
"is_deliverable": true,
"is_free_email": false,
"is_disposable": false,
"is_role_account": false
}
],
"valid_emails_count": 1,
"spidersite_error": null,
"spiderverify_error": null
}
],
"processing_time_seconds": 245.3,
"spidersite_timed_out": false,
"spiderverify_timed_out": false
}

Completed Response (0 results):

{
"success": true,
"has_results": false,
"job_id": "ac6fed8e-8188-4dbd-bdfa-6c636d49486b",
"campaign_id": "camp_au_restaurant_20260116155853_74a4a6b2",
"status": "completed",
"businesses_total": 0,
"businesses_with_domains": 0,
"businesses_filtered": 0,
"spidersite_completed": 0,
"spidersite_failed": 0,
"spiderverify_completed": 0,
"spiderverify_failed": 0,
"total_emails_found": 0,
"total_valid_emails": 0,
"businesses": [],
"processing_time_seconds": 0.05,
"spidersite_timed_out": false,
"spiderverify_timed_out": false
}

Partial Response (Timeout):

{
"success": true,
"has_results": true,
"job_id": "79719220-6309-4742-9850-adb988b5dd4a",
"campaign_id": "camp_lu_restaurants_20251223_abc123",
"status": "partial",
"businesses_total": 100,
"businesses_with_domains": 69,
"businesses_filtered": 4,
"spidersite_completed": 69,
"spidersite_failed": 0,
"spiderverify_completed": 43,
"spiderverify_failed": 0,
"total_emails_found": 201,
"total_valid_emails": 8,
"businesses": [...],
"processing_time_seconds": 601.36,
"spidersite_timed_out": true,
"spiderverify_timed_out": true
}

Error Responses

Invalid Job ID Format

{
"detail": "Invalid job_id format - must be a valid UUID"
}

Campaign Not Found

{
"detail": "Campaign not found"
}

Job Not Found

{
"detail": "Job not found"
}

No Workflow Configured

{
"detail": "This campaign does not have workflow configuration enabled"
}

Comparison with /workflow-results

Feature/jobs/{job_id}/results/workflow-results
ScopeSingle jobEntire campaign
GroupingFlat list of businessesGrouped by location
BlockingYes (optional)No
Use caseReal-time integrationsBatch processing
Response sizeSmaller (one job)Larger (all jobs)