One list · results for each row
Validate addresses in a batch
Upload up to 10,000 Canadian addresses or coordinates in a CSV or JSON request. Select the profile sections you need, then receive per-row results with coverage states.
- Submit your listUse street-address fields or coordinates and choose sections.
- Poll progressSubmission returns HTTP 202. Use its batch ID to check status.
- Join each resultKeep the input index and each section’s coverage. Download paginated CSV or JSONL results.
Estimate your credits
For school assignments and property values: 3 credits per coordinate row, plus 2 when an address needs resolving.
300 credits
Credits are reserved at submission. Other sections have different costs. Check your daily balance before submitting; this calculator does not upload data.
Try the captured one-row request
This public-school point in Surrey is a real captured example. Use the batch ID from your own submission; example jobs expire.
cat > addresses.csv <<'CSV'
lat,lng,region,locality
49.1416582,-122.8795092,BC,Surrey
CSV
curl --fail-with-body "https://api.hillbase.com/v1/batches?sections=school_assignments,property_values" \
-H "X-API-Key: $HILLBASE_API_KEY" -H "Content-Type: text/csv" \
--data-binary @addresses.csv > batch.json
# Requires jq. Submission returns HTTP 202; processing is asynchronous.
BATCH_ID=$(jq -r '.data.id' batch.json)
curl --fail-with-body -H "X-API-Key: $HILLBASE_API_KEY" \
"https://api.hillbase.com/v1/batches/$BATCH_ID"
# Repeat polling until data.status is completed, cancelled or failed.
# After completion, download the first page as CSV.
curl --fail-with-body -H "X-API-Key: $HILLBASE_API_KEY" \
"https://api.hillbase.com/v1/batches/$BATCH_ID/results?format=csv&offset=0&limit=1000" \
-o results.csvSubmission · HTTP 202
Real captured response · 2026-10-12
{
"schema_version": "hillbase.v0",
"data": {
"id": "bat_uu7tsnpefhou",
"status": "queued",
"total": 1,
"processed": 0,
"resolved": 0,
"no_match": 0,
"errors": 0,
"progress": 0,
"credits": 3,
"sections": [
"school_assignments",
"property_values"
],
"created_at": "2026-10-12T18:49:50.797639+00:00",
"expires_at": "2026-10-19T18:49:50.797639+00:00"
},
"coverage": {
"capability": "batch_queries",
"status": "supported",
"outcome": "resolved",
"geography": null,
"period": null,
"message": null
},
"provenance": [],
"warnings": [],
"retrieved_at": "2026-10-12T18:49:50.811464Z"
}Result · input index 0
Coverage excerpt from the same captured job. Record fields omitted here.
{
"index": 0,
"coverage": {
"period": null,
"status": "partial",
"message": null,
"outcome": "resolved",
"geography": "point",
"capability": "address_profile"
},
"sections": {
"property_values": {
"coverage": {
"period": null,
"status": "unavailable",
"message": "Lake property values are unavailable.",
"outcome": "no_match",
"geography": "point",
"capability": "property_values"
}
},
"school_assignments": {
"coverage": {
"period": null,
"status": "supported",
"message": null,
"outcome": "resolved",
"geography": "point",
"capability": "school_assignments"
}
}
}
}