Every delivery starts with an address typed by a human, and every routing engine works exclusively with coordinates. Geocoding is the bridge between the two, and in logistics it earns its keep three times over: at order time, across your existing database, and live on the road.
The cheapest failed delivery is the one you catch before dispatch. Geocoding the address the moment a customer submits it does two jobs at once: it confirms the address resolves to a real location, and it normalizes the components (street, house number, postal code, city) so your system stores clean data instead of free text.
import { ExoAPI } from "@flower-digital/exoapi-sdk";
const exoapi = new ExoAPI({ apiKey: "<your-api-key>" });
async function validateOrderAddress(input) {
const res = await exoapi.geocoding({ address: input });
if (!res.houseNumber || !res.postalCode) {
// Ask the customer to confirm - the address resolved only partially
return { ok: false, suggestion: res.address };
}
return { ok: true, lat: res.lat, lon: res.lon, normalized: res };
}
Store the returned coordinates with the order - with ExoAPI you are allowed to keep them - and your dispatch, routing and ETA systems never need to geocode that order again.
Routing engines, territory planning and delivery-density analysis all need your historical addresses as coordinates. A one-off batch job handles it:
import { ExoAPI } from "@flower-digital/exoapi-sdk";
const exoapi = new ExoAPI({ apiKey: "<your-api-key>" });
for (const customer of customers) {
const res = await exoapi.geocoding({ address: customer.address });
await db.customers.update(customer.id, { lat: res.lat, lon: res.lon });
}
Daily quotas scale with the plan - 1,000 requests/day on Starter (9€/month) up to 50,000/day on Enterprise - and because results are stored in your own database, the batch runs once. A 30,000-customer backlog fits inside a single month of the Starter plan.
Driver apps and GPS trackers report raw coordinates. Reverse geocoding - included in the same subscription - turns them back into something dispatchers and customers understand:
const position = await exoapi.reverseGeocoding({
lat: 51.5237,
lon: -0.1585,
});
// "Your driver is near Baker Street, London NW1 6XE"
The same call powers "delivery arrived in
Start a free 14-day trial - no credit card required - and geocode a sample of your delivery addresses today.