Spatial Actuarial Intelligence

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 MBRuns in the backgroundCSV & GeoJSON outREST APIOnly mapped columns storedPurged after 7 days
One row, end to end
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.
1Upload2Map columns3Output4Confirm
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 columnsColumns 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 →
Upload2Map columns3Output4Confirm
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 columnsSingle 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.
UploadMap columns3Output4Confirm
Output & options
Choose which geocoded fields to include in the result file, and how the geocoder should match.
Output fields
Latitude & longituderequired
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.
UploadMap columnsOutput4Confirm
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 progress0 / 2 000 rows
Close the tab if you like - we'll email you when the job finishes.
Test-addresses-sample
Completed2 000 rows
ShareArchive
Total rows
0
Match rate
0%
Processing time
4m 16s
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.

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.
Always
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 kept
Your 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 blocked
Columns 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, automatically
Results 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 locally
Matching runs against Riskscape's own national address and property base - not a third-party global geocoder your addresses get shipped off to.
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

The questions we get asked before the first job - on formats, matching, pricing and what happens to your file.

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.