RISKSCAPE Batch Geocoder Contact us
Batch Geocoding

A CSV of messy addresses in.
Clean coordinates out.

Upload an MS Excel spreadsheet or CSV file of South African addresses, tell us which columns hold the address, and download latitude, longitude, a standardized address and the property key for every row — matched against Riskscape's own national address and property data.

CSV up to 250 MB Runs in the background CSV & GeoJSON out REST API Only mapped columns stored Purged after 7 days
One row, end to end live example
Input — a raw line from your file
Output — geocoded
 
How it works

Six steps from spreadsheet to geocoded file

This is the actual flow, animated. It plays through on its own — click any step to jump to it. Every address, reference and property key shown below is fictitious sample data.

app.riskscape.pro/geocoding
Geocoding
Upload a CSV of addresses, map the columns, and pull back clean coordinates.
</> API + New geocoding job
Jobs
2
Rows located
38 173
Avg match rate
82.6%
Running
0
JobStatusRowsMatch rateCreated
Policy-book-2026-Q2Completed34 11884.1%3 Aug 2026
Broker-imports-JulyCompleted12 09278.4%28 Jul 2026
Claims-geo-refreshArchived8 64081.0%14 Jul 2026
Every job stays on this list with its status, row count and match rate — reopen it, share it with a colleague, or archive it when you're done.
1Upload 2Map columns 3Output 4Confirm
Upload your CSV
Drop a CSV with one address per row. Up to 250 MB per file.
Drag a CSV here, or click to browse
We'll detect your columns on the next step · CSV only
Test-addresses-sample.csv ~2 000 rows · 2 columns Columns detected
src_idres_source_line
SMP-10024127 Baobab Crescent Riverbend Estate Kempton Park
SMP-10024214 Marula Avenue Eastleigh Bellville
SMP-100243108 Springbok Street Newlands Park Polokwane
SMP-1002446 Protea Rise 12 Fynbos Road Stellenbosch
SMP-100245245 Kiepersol Street Sunhaven Bloemfontein
Showing first 10 of ~2 000 rows. Columns detected as personal data are flagged — they can't be used as an address or as your identifier.
Continue →
Upload 2Map columns 3Output 4Confirm
Map your columns
Tell us which columns make up the address, and which one identifies each row. Nothing else from your file is stored.
Build from columns Single address column
Full address column
res_source_line
Postal code column (optional)
— Unmapped —
Preview from your file
27 Baobab Crescent Riverbend Estate Kempton Park
Customer or internal reference identifier
Included in your output automatically so every result links back to its source row.
src_id
Summary
Address columns1
Identifiersrc_id
Only the columns you map here are stored and sent to the geocoder.
Upload Map columns 3Output 4Confirm
Output & options
Choose which geocoded fields to include in the result file, and how the geocoder should match.
Output fields
Latitude & longitude required
Candidate match addressThe address the geocoder actually matched your line to.
Standardized addressYour line rewritten into a clean, consistent format. add-on
Property key (SG21), property description & subplace IDJoin your rows to the deeds, valuation and risk layers behind the property. add-on
Add-ons only apply to rows that match confidently and return the field — review and no-match rows don't get charged for them.
Matching options
Prefer provinces (optional)
Gauteng, Western Cape
A preference, not a hard filter — a confident match outside the selection can still be returned.
Upload Map columns Output 4Confirm
Confirm & start
We'll geocode in the background — you can leave this page and we'll email you when it's done.
Job name
Test-addresses-sample
Rows~2 000
Address columnsres_source_line
Identifiersrc_id
Output fields
latitude, longitude, candidate match address, standardized address, property key (SG21)
The full estimate for your exact row count and chosen output fields is shown here before you press start — along with the retention terms: results stay available for 7 days after the job ends, then they're permanently purged from our servers.
▶ Start geocoding
Geocoding in progress 0 / 2 000 rows
Close the tab if you like — we'll email you when the job finishes.
Test-addresses-sample
Completed 2 000 rows
Share Archive
Total rows
0
Match rate
0%
Processing time
42s
Match quality
1 262
Match
601
Review
137
No match
Review flagged rows
Accept or reject each flagged row — and extend retention to 14 days.
Start review
MatchReviewNo match
Powered by Riskscape
Results available until 18 Aug 2026 · 7 days · we'll email you a reminder before they're purged ↓ CSV ↓ GeoJSON
Step 1 of 6

Why it matters —
1 / 6
What you get back

The result file, column by column

Your identifier comes back on every row, so the output drops straight into a join. Choose only the fields you actually need.

FieldWhat it isIncluded
latitude, longitude The coordinate pair for the matched property, in WGS84 decimal degrees. Always
status Match, Review or No match — so you know which rows you can trust without checking them yourself. Always
your identifier The policy, claim or customer reference you nominated, carried through untouched for joining back to source. Always
candidate_match_address The address the geocoder actually matched to — the fastest way to eyeball whether a match is sensible. Optional
standardized_address Your messy line rewritten into a consistent, deduplication-friendly format. Add-on
sg21_key, property_description, subplace_id The national property key and its description plus the subplace it sits in — your join into deeds, valuation rolls and Riskscape's risk layers. Add-on

Two ways to give us the address

One full_address column, or build it from separate street, suburb, town and postal code columns. Either way you see a live preview of the exact string we'll geocode before you start.

Province preference

Bias matching toward the provinces your book actually sits in. It's a preference, not a filter — a confident match elsewhere still comes back rather than being silently dropped.

CSV or GeoJSON

Download a CSV for the actuarial model and the spreadsheet, or GeoJSON to drop straight into QGIS, ArcGIS or a web map — same job, no re-run.

Match quality

Every row is graded, not guessed

The expensive mistake in geocoding isn't a missing coordinate — it's a confident-looking coordinate that's wrong. So every row lands in one of three buckets, and you decide what to do with the middle one.

Match

The geocoder is confident. Coordinates, the candidate address it matched, and any add-on fields you selected all come back. These are the rows you can push into a model without looking at them.

Review

A plausible candidate was found, but something didn't line up. You get the coordinate and the candidate address side by side with your input line, and you accept or reject each one — on a map or in a table.

No match

Nothing credible was found — usually a partial line, a farm portion, or a suburb with no street. You get told plainly instead of getting a suburb centroid dressed up as a street address.

The review step earns its keep

Starting a review turns the flagged rows into a short queue: input line, candidate match, coordinate, map pin. Accepting a row promotes it to a confirmed match and releases the add-on fields for it. Reviewing a job also extends its 7-day retention window to 14 days.

What moves your match rate

Structured input wins. Separate street / suburb / town / postal code columns beat one concatenated line; a postal code column resolves duplicate suburb names; and stripping complex or estate names from the street field lifts results noticeably. Run a sample first and see for yourself.

Your file stays yours

Address data is personal information. The geocoder is built so you hand over the least possible amount of it — and so nothing lingers.

Only the columns you map are keptYour address columns and your chosen identifier. Every other column in the upload is never sent to the geocoder and never stored.
Personal-data columns are flagged and blockedColumns that look like names, ID numbers or contact details are detected on upload and can't be used as an address or as your identifier.
Purged after 7 days, automaticallyResults stay available for 7 days after a job ends, then they're permanently deleted from our servers. Every job shows its exact expiry date, and we email you a reminder before it arrives so nothing you need disappears unnoticed.
South African data, matched locallyMatching runs against Riskscape's own national address and property base — not a third-party global geocoder your addresses get shipped off to.
For your dev team

Same geocoder, straight from your pipeline

The UI is for the analyst with a spreadsheet. When the same job needs to run every night, post the file to the API, poll the job, and pull the results — identical matching, identical grading, identical output fields.

Submit & poll jobs CSV or GeoJSON results Same match grading Fits nightly ETL
Talk to us about API access
batch-geocode.sh
# 1. submit a job
POST /v1/geocoding/jobs
  file="sample-addresses.csv"
  address_column="res_source_line"
  identifier="src_id"
  fields=["latlng","candidate","sg21"]

# 2. poll until complete
GET /v1/geocoding/jobs/a9f3…
> { "status": "completed",
>   "rows": 2000,
>   "matched": 1262,
>   "review": 601 }

# 3. pull the results
GET /v1/geocoding/jobs/a9f3…/results?format=csv
Who it's for

If your addresses live in a spreadsheet, this is for you

No GIS licence, no data science team, no integration project. A CSV and a browser.

Insurers & actuaries

Locate a policy book or claims history to property level before running catastrophe, flood or fire exposure.

Banks & lenders

Resolve collateral and valuation portfolios to a property key so risk layers can be joined per asset.

Government & municipal

Turn service, rates or infrastructure registers into mapped datasets without a procurement cycle.

Anyone with a messy list

Logistics, utilities, retail networks, research samples — any list of South African addresses that needs coordinates.

Before you sign up

Straight answers

What match rate should I expect?
It depends almost entirely on your input. A single concatenated line with estate names, unit numbers and no postal code — like the sample in the walkthrough — sits lower, with a large reviewable middle. Structured columns plus a postal code push it up substantially. The honest answer is to run a sample of your real data and look at the three buckets before committing the whole book.
How big can my file be?
Up to 250 MB per CSV, one address per row. Jobs run in the background, so you can close the tab — you'll get an email when it finishes, and the job stays on your dashboard either way.
Can I stop a job part way?
Yes. You keep the rows already processed and can download them, and you're not charged for rows that never ran.
What happens to the rows I don't trust?
They're flagged as Review rather than silently accepted. You work through them in the review queue — input line against candidate match, with a map pin — and accept or reject each one. Accepted rows become confirmed matches and pick up the add-on fields.
How long do you keep my results?
Seven days from the moment the job ends — then the results are permanently purged from our servers. The expiry date is shown on the job itself, and we send you an email reminder as it gets close so you have time to download anything you still need. Reviewing a job's flagged rows extends the window to 14 days. Download the CSV or GeoJSON and the file is yours to keep for as long as you like.
Is my data used to train or improve anything?
Your upload is used to run your job. Only the columns you explicitly map are stored, results are deleted on the schedule shown on the job, and matching happens against Riskscape's own South African address and property base.
Can my team see the same job?
Yes — jobs can be shared, and the dashboard can be switched between your own jobs and your organisation's. Finished jobs can be archived to keep the active list clean without losing the record.

Run a sample of your own addresses

Take a few hundred rows off your real book, put them through the six steps above, and look at the three buckets. That's the only benchmark that actually tells you anything.

Riskscape · Spatial Actuarial Intelligence · riskscape.pro