[{"data":1,"prerenderedAt":517},["ShallowReactive",2],{"footer-learn-links":3,"site-prefooter-cta":16,"learn-\u002Flearn\u002Fdistance-matrix-api\u002F":24,"related-learn-\u002Flearn\u002Fdistance-matrix-api\u002F":489,"learn-org-author":505},[4,7,10,13],{"title":5,"path":6},"What Is a Distance Matrix API?","\u002Flearn\u002Fdistance-matrix-api",{"title":8,"path":9},"Can You Store Geocoding Results?","\u002Flearn\u002Fgeocoding-data-storage",{"title":11,"path":12},"What Does a \"Free\" Map API Actually Cost?","\u002Flearn\u002Fwhat-does-a-free-map-api-cost",{"title":14,"path":15},"What Is the Best Geocoding API?","\u002Flearn\u002Fbest-geocoding-api",{"id":17,"extension":18,"heading":19,"meta":20,"stem":21,"text":22,"__hash__":23},"site\u002Fsite\u002Fprefooter-cta.yml","yml","Business Outcomes That Fuel Your Growth",{},"site\u002Fprefooter-cta","With Stadia Maps, you build the solutions that matter. Logistics platforms provide accurate ETAs, fleet management apps reduce fuel costs, and emergency dispatch systems improve response times.","XztWiZDFyAC0XCoeYLLQrcyaVmP8uvGWALRS354c9I4",{"id":25,"title":5,"author":26,"body":27,"category":413,"description":473,"extension":474,"head":475,"image":477,"imageAlt":478,"keywords":479,"meta":480,"modified":481,"navigation":482,"path":6,"published":481,"rawbody":483,"schemaOrg":479,"seo":484,"stem":485,"term":486,"termDescription":487,"__hash__":488},"learn\u002Flearn\u002Fdistance-matrix-api.md","Stadia Maps Team",{"type":28,"value":29,"toc":457},"minimark",[30,49,52,57,91,95,98,136,139,143,146,213,224,233,236,240,248,251,254,257,261,264,316,319,332,336,349,352,356,393,401,405,409,414],[31,32,33,34,42,43,48],"p",{},"A distance matrix API returns the travel time and distance between every combination of a set of starting points and a set of destinations, in a single request. Ask it about three warehouses and five delivery addresses and you get back all 15 pairs at once. The ",[35,36,41],"a",{"href":37,"rel":38,"target":40},"https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F",[39],"external","_blank","Stadia Maps Time\u002FDistance Matrix API"," \"lets you compare travel times between a set of possible start and end points,\" using the same road network and travel modes as the rest of the ",[35,44,47],{"href":45,"rel":46,"target":40},"https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F",[39],"Stadia Maps Routing API",".",[31,50,51],{},"The question a matrix answers is \"which of these is closest?\" It is not the same question a routing API answers, which is \"how do I get from here to there?\"",[53,54,56],"h2",{"id":55},"key-takeaways","Key Takeaways",[58,59,60,64,73,76,79],"ul",{},[61,62,63],"li",{},"A distance matrix returns times and distances for every source-and-target pair. Elements equal sources multiplied by targets, so three sources and five targets is 15 elements.",[61,65,66,67,72],{},"Use a matrix to rank or assign. Use ",[35,68,71],{"href":69,"rel":70,"target":40},"https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F",[39],"standard routing"," to actually navigate, because a matrix returns no route geometry or turn-by-turn instructions.",[61,74,75],{},"Stadia Maps bills the matrix at 10 credits per element, against 20 credits per request for standard routing. Ranking 10 destinations costs 100 credits as a matrix and 200 as 10 separate route calls.",[61,77,78],{},"Matrix size caps at 625 elements on Standard and 10,000 on Professional, with a distance limit of 400km for auto, bus, truck, and taxi, and 200km for other modes.",[61,80,81,82,86,87,90],{},"Traffic-influenced profiles work here through the ",[83,84,85],"code",{},"_traffic"," and ",[83,88,89],{},"_traffic_premium"," suffixes, and require a Standard plan or higher.",[53,92,94],{"id":93},"matrix-routing-or-isochrone-which-do-you-need","Matrix, Routing, or Isochrone: Which Do You Need?",[31,96,97],{},"These three endpoints answer three different questions, and picking the wrong one is the most common and most expensive mistake in this part of an API.",[58,99,100,111,122],{},[61,101,102,106,107,110],{},[103,104,105],"strong",{},"\"How do I get from A to B?\""," Use ",[35,108,71],{"href":69,"rel":109,"target":40},[39],". It returns the path, the geometry, and turn-by-turn instructions.",[61,112,113,116,117,121],{},[103,114,115],{},"\"Which of these N places is closest to me?\""," Use the ",[35,118,120],{"href":37,"rel":119,"target":40},[39],"Time\u002FDistance Matrix",". It returns a ranked set of times and distances and no path at all.",[61,123,124,106,127,131,132,135],{},[103,125,126],{},"\"What area can I reach in 20 minutes?\"",[35,128,130],{"href":129},"\u002Flearn\u002Fisochrones\u002F","isochrones",". It returns a polygon, not a list of places. ",[35,133,134],{"href":129},"What Is an Isochrone?"," covers that side in depth, including when a polygon beats a ranking.",[31,137,138],{},"The matrix is the one teams reach for last and should often reach for first. Dispatch, store locators, and delivery assignment all look like routing problems, and all of them are really ranking problems. You need to know which driver is nearest, not how that driver turns left.",[53,140,142],{"id":141},"how-a-matrix-request-works","How a Matrix Request Works",[31,144,145],{},"You send two arrays and a travel mode. The API returns the grid.",[58,147,148,156,164,193,205],{},[61,149,150,155],{},[103,151,152],{},[83,153,154],{},"sources",": the starting locations, each with a latitude and longitude.",[61,157,158,163],{},[103,159,160],{},[83,161,162],{},"targets",": the destinations, in the same shape.",[61,165,166,171,172,175,176,175,179,175,182,175,185,188,189,192],{},[103,167,168],{},[83,169,170],{},"costing",": the travel mode. ",[83,173,174],{},"auto",", ",[83,177,178],{},"pedestrian",[83,180,181],{},"bicycle",[83,183,184],{},"truck",[83,186,187],{},"taxi",", and ",[83,190,191],{},"bus"," are among the documented options.",[61,194,195,200,201,204],{},[103,196,197],{},[83,198,199],{},"date_time",": optional, for traffic-influenced profiles, in ",[83,202,203],{},"YYYY-MM-DDTHH:MM"," format.",[61,206,207,212],{},[103,208,209],{},[83,210,211],{},"costing_options",": optional vehicle-specific preferences.",[31,214,215,216,219,220,48],{},"The endpoint is ",[83,217,218],{},"https:\u002F\u002Fapi.stadiamaps.com\u002Fmatrix\u002Fv1",". Full parameter detail is in the ",[35,221,223],{"href":37,"rel":222,"target":40},[39],"Time\u002FDistance Matrix docs",[31,225,226,227,229,230,232],{},"One documented constraint that bites in production: you cannot combine a root-level ",[83,228,199],{}," with per-waypoint ",[83,231,199],{},". Pick one.",[31,234,235],{},"A one-to-many matrix is the most common shape. One source, many targets, which gives you a ranked list of destinations from a single origin. Many-to-many is what fleet and dispatch systems use, and it is where the element count grows fastest.",[53,237,239],{"id":238},"what-a-matrix-costs-and-why-the-shape-matters","What a Matrix Costs, and Why the Shape Matters",[31,241,242,243,247],{},"Stadia Maps bills the ",[35,244,246],{"href":245},"\u002Fpricing\u002F","Time\u002FDistance Matrix at 10 credits per element",", where an element is one source-and-target pair. Standard routing bills at 20 credits per request.",[31,249,250],{},"That pricing shape rewards asking the right question. Ranking 10 destinations from one origin is 10 elements, or 100 credits. Doing the same work as 10 separate routing calls is 200 credits, and you wait on 10 round trips instead of one.",[31,252,253],{},"It also punishes the wrong shape. Elements multiply, so a 50-by-50 matrix is 2,500 elements, not 100. If you only need the times from one depot, send one source and 50 targets rather than a square matrix you will throw away most of.",[31,255,256],{},"The tradeoff is what you give up. A matrix returns times and distances, and no geometry and no instructions. If you need to draw the route on a map or give a driver directions, you still need a routing call for the pair you selected. The common pattern is matrix first to choose, routing second to navigate.",[53,258,260],{"id":259},"matrix-size-limits","Matrix Size Limits",[31,262,263],{},"Limits are documented per plan, and they apply to elements rather than to locations.",[265,266,267,286],"table",{},[268,269,270],"thead",{},[271,272,273,277,280,283],"tr",{},[274,275,276],"th",{},"Travel mode",[274,278,279],{},"Standard",[274,281,282],{},"Professional",[274,284,285],{},"Distance limit",[287,288,289,304],"tbody",{},[271,290,291,295,298,301],{},[292,293,294],"td",{},"Auto, bus, truck, taxi",[292,296,297],{},"625 elements",[292,299,300],{},"10,000 elements",[292,302,303],{},"400km",[271,305,306,309,311,313],{},[292,307,308],{},"Other modes",[292,310,297],{},[292,312,300],{},[292,314,315],{},"200km",[31,317,318],{},"625 elements is a 25-by-25 matrix, or one source against 625 targets. 10,000 elements is 100 by 100.",[31,320,321,322,327,328,331],{},"Element caps are documented for the Standard and Professional plans. Check the ",[35,323,326],{"href":324,"rel":325,"target":40},"https:\u002F\u002Fdocs.stadiamaps.com\u002Flimits\u002F",[39],"service limits documentation"," and the ",[35,329,330],{"href":245},"pricing page"," for what applies to your plan. For contrast, standard routing and optimized routing each cap at 50 locations per route.",[53,333,335],{"id":334},"traffic-influenced-matrices","Traffic-Influenced Matrices",[31,337,338,339,343,344,86,346,348],{},"The same ",[35,340,342],{"href":37,"rel":341,"target":40},[39],"traffic-influenced profiles"," available elsewhere in the routing API apply here, through the ",[83,345,85],{},[83,347,89],{}," suffixes on supported costing models. Stadia Maps traffic profiles carry current and historical conditions for over 80 countries.",[31,350,351],{},"This matters more for a matrix than for a single route. A dispatch decision made on free-flow speeds sends the wrong driver at 17:30, and the error compounds across every assignment in the batch. Traffic-influenced routing requires a Standard plan or higher.",[53,353,355],{"id":354},"common-distance-matrix-use-cases","Common Distance Matrix Use Cases",[58,357,358,364,370,381,387],{},[61,359,360,363],{},[103,361,362],{},"Dispatch and driver assignment."," Score every available driver against every open job, then assign on the ranking rather than on straight-line distance.",[61,365,366,369],{},[103,367,368],{},"Store and branch locators."," Return the three nearest locations by drive time instead of by radius, which is the difference between a useful result and one with a river in the way.",[61,371,372,375,376,380],{},[103,373,374],{},"Delivery and service-area planning."," Feed the matrix into a solver. Stadia Maps documents integration with ",[35,377,379],{"href":378},"\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F","OptaPlanner and VROOM"," for rich vehicle routing problems.",[61,382,383,386],{},[103,384,385],{},"Field sales territory design."," Cluster accounts by travel time from a rep's base rather than by postal code.",[61,388,389,392],{},[103,390,391],{},"Marketplace supply matching."," Rank nearby providers by how long they would actually take to arrive.",[31,394,395,396,400],{},"For the single-vehicle case, where you need the best order to visit a set of stops rather than a ranking, ",[35,397,399],{"href":45,"rel":398,"target":40},[39],"Optimized Routing"," solves the traveling salesman shape directly.",[402,403],"faq-section",{":faqs":404},"[{\"question\":\"What is a distance matrix API?\",\"answer\":\"A distance matrix API returns the travel time and distance between every combination of a set of starting points and a set of destinations in one request. The Stadia Maps Time\u002FDistance Matrix API lets you compare travel times between a set of possible start and end points, using the same road network and travel modes as the rest of the routing API.\"},{\"question\":\"What is the difference between a distance matrix and a routing API?\",\"answer\":\"A routing API answers how to get from one place to another and returns the path, geometry, and turn-by-turn instructions. A distance matrix answers which of several places is closest and returns only times and distances, with no route geometry. The common pattern is to call the matrix first to choose a destination, then call routing for the pair you selected.\"},{\"question\":\"How is a distance matrix request billed on Stadia Maps?\",\"answer\":\"The Time\u002FDistance Matrix is billed at 10 credits per element, where an element is one source-and-target pair. Standard routing is billed at 20 credits per request. Ranking 10 destinations from a single origin is 10 elements, or 100 credits, against 200 credits for the same work as 10 individual routing calls.\"},{\"question\":\"How large can a distance matrix be?\",\"answer\":\"Matrix size is capped at 625 elements on the Standard plan and 10,000 elements on the Professional plan, where elements equal sources multiplied by targets. There is also a distance limit of 400km for auto, bus, truck, and taxi, and 200km for other travel modes. The service limits documentation lists the caps that apply to each plan.\"},{\"question\":\"Does a distance matrix account for traffic?\",\"answer\":\"It can. Traffic-influenced profiles are available through the _traffic and _traffic_premium suffixes on supported costing models, and Stadia Maps traffic profiles carry current and historical conditions for over 80 countries. Traffic-influenced routing requires a Standard plan or higher.\"},{\"question\":\"What travel modes does the Stadia Maps matrix support?\",\"answer\":\"The documented costing options include auto, pedestrian, bicycle, truck, taxi, and bus. The broader routing API also offers specialized profiles for trucks, motor scooters, and other vehicle types.\"}]",[53,406,408],{"id":407},"where-to-go-next","Where to Go Next",[410,411,413],"h3",{"id":412},"routing-navigation","Routing & Navigation",[58,415,416,421,428,435,442,449],{},[61,417,418,420],{},[35,419,134],{"href":129}," for reachable-area questions rather than ranking questions",[61,422,423,427],{},[35,424,426],{"href":425},"\u002Flearn\u002Fbest-routing-api\u002F","What Is the Best Routing API?"," for how to evaluate providers",[61,429,430,434],{},[35,431,433],{"href":37,"rel":432,"target":40},[39],"Time\u002FDistance Matrix API reference"," for the full parameter set and limits",[61,436,437,441],{},[35,438,440],{"href":69,"rel":439,"target":40},[39],"Standard Routing API reference"," for the navigate-this-pair call",[61,443,444,448],{},[35,445,447],{"href":45,"rel":446,"target":40},[39],"Routing overview docs"," for the full endpoint list",[61,450,451,86,454],{},[35,452,453],{"href":378},"Matrix Routing product page",[35,455,456],{"href":245},"pricing tiers",{"title":458,"searchDepth":459,"depth":459,"links":460},"",4,[461,463,464,465,466,467,468,469],{"id":55,"depth":462,"text":56},2,{"id":93,"depth":462,"text":94},{"id":141,"depth":462,"text":142},{"id":238,"depth":462,"text":239},{"id":259,"depth":462,"text":260},{"id":334,"depth":462,"text":335},{"id":354,"depth":462,"text":355},{"id":407,"depth":462,"text":408,"children":470},[471],{"id":412,"depth":472,"text":413},3,"A distance matrix API returns travel times and distances between many origins and destinations in one request. Learn when to use one instead of routing.","md",{"script":476},[],"\u002Fimages\u002Fog\u002Fwhat-is-a-distance-matrix-api.png","What Is a Distance Matrix API? | Stadia Maps",null,{},"2026-09-29",true,"---\ntitle: What Is a Distance Matrix API?\ndescription: A distance matrix API returns travel times and distances between many origins and destinations in one request. Learn when to use one instead of routing.\nauthor: Stadia Maps Team\ncategory: Routing & Navigation\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-a-distance-matrix-api.png\nimageAlt: What Is a Distance Matrix API? | Stadia Maps\nmodified: 2026-09-29\npublished: 2026-09-29\nterm: Distance Matrix\ntermDescription: A table of travel times and distances between every combination of a set of starting points and a set of destinations.\n---\n\nA distance matrix API returns the travel time and distance between every combination of a set of starting points and a set of destinations, in a single request. Ask it about three warehouses and five delivery addresses and you get back all 15 pairs at once. The [Stadia Maps Time\u002FDistance Matrix API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F) \"lets you compare travel times between a set of possible start and end points,\" using the same road network and travel modes as the rest of the [Stadia Maps Routing API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F).\n\nThe question a matrix answers is \"which of these is closest?\" It is not the same question a routing API answers, which is \"how do I get from here to there?\"\n\n## Key Takeaways\n\n- A distance matrix returns times and distances for every source-and-target pair. Elements equal sources multiplied by targets, so three sources and five targets is 15 elements.\n- Use a matrix to rank or assign. Use [standard routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F) to actually navigate, because a matrix returns no route geometry or turn-by-turn instructions.\n- Stadia Maps bills the matrix at 10 credits per element, against 20 credits per request for standard routing. Ranking 10 destinations costs 100 credits as a matrix and 200 as 10 separate route calls.\n- Matrix size caps at 625 elements on Standard and 10,000 on Professional, with a distance limit of 400km for auto, bus, truck, and taxi, and 200km for other modes.\n- Traffic-influenced profiles work here through the `_traffic` and `_traffic_premium` suffixes, and require a Standard plan or higher.\n\n## Matrix, Routing, or Isochrone: Which Do You Need?\n\nThese three endpoints answer three different questions, and picking the wrong one is the most common and most expensive mistake in this part of an API.\n\n- **\"How do I get from A to B?\"** Use [standard routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F). It returns the path, the geometry, and turn-by-turn instructions.\n- **\"Which of these N places is closest to me?\"** Use the [Time\u002FDistance Matrix](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F). It returns a ranked set of times and distances and no path at all.\n- **\"What area can I reach in 20 minutes?\"** Use [isochrones](\u002Flearn\u002Fisochrones\u002F). It returns a polygon, not a list of places. [What Is an Isochrone?](\u002Flearn\u002Fisochrones\u002F) covers that side in depth, including when a polygon beats a ranking.\n\nThe matrix is the one teams reach for last and should often reach for first. Dispatch, store locators, and delivery assignment all look like routing problems, and all of them are really ranking problems. You need to know which driver is nearest, not how that driver turns left.\n\n## How a Matrix Request Works\n\nYou send two arrays and a travel mode. The API returns the grid.\n\n- **`sources`**: the starting locations, each with a latitude and longitude.\n- **`targets`**: the destinations, in the same shape.\n- **`costing`**: the travel mode. `auto`, `pedestrian`, `bicycle`, `truck`, `taxi`, and `bus` are among the documented options.\n- **`date_time`**: optional, for traffic-influenced profiles, in `YYYY-MM-DDTHH:MM` format.\n- **`costing_options`**: optional vehicle-specific preferences.\n\nThe endpoint is `https:\u002F\u002Fapi.stadiamaps.com\u002Fmatrix\u002Fv1`. Full parameter detail is in the [Time\u002FDistance Matrix docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F).\n\nOne documented constraint that bites in production: you cannot combine a root-level `date_time` with per-waypoint `date_time`. Pick one.\n\nA one-to-many matrix is the most common shape. One source, many targets, which gives you a ranked list of destinations from a single origin. Many-to-many is what fleet and dispatch systems use, and it is where the element count grows fastest.\n\n## What a Matrix Costs, and Why the Shape Matters\n\nStadia Maps bills the [Time\u002FDistance Matrix at 10 credits per element](\u002Fpricing\u002F), where an element is one source-and-target pair. Standard routing bills at 20 credits per request.\n\nThat pricing shape rewards asking the right question. Ranking 10 destinations from one origin is 10 elements, or 100 credits. Doing the same work as 10 separate routing calls is 200 credits, and you wait on 10 round trips instead of one.\n\nIt also punishes the wrong shape. Elements multiply, so a 50-by-50 matrix is 2,500 elements, not 100. If you only need the times from one depot, send one source and 50 targets rather than a square matrix you will throw away most of.\n\nThe tradeoff is what you give up. A matrix returns times and distances, and no geometry and no instructions. If you need to draw the route on a map or give a driver directions, you still need a routing call for the pair you selected. The common pattern is matrix first to choose, routing second to navigate.\n\n## Matrix Size Limits\n\nLimits are documented per plan, and they apply to elements rather than to locations.\n\n| Travel mode            | Standard     | Professional    | Distance limit |\n| ---------------------- | ------------ | --------------- | -------------- |\n| Auto, bus, truck, taxi | 625 elements | 10,000 elements | 400km          |\n| Other modes            | 625 elements | 10,000 elements | 200km          |\n\n625 elements is a 25-by-25 matrix, or one source against 625 targets. 10,000 elements is 100 by 100.\n\nElement caps are documented for the Standard and Professional plans. Check the [service limits documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Flimits\u002F) and the [pricing page](\u002Fpricing\u002F) for what applies to your plan. For contrast, standard routing and optimized routing each cap at 50 locations per route.\n\n## Traffic-Influenced Matrices\n\nThe same [traffic-influenced profiles](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F) available elsewhere in the routing API apply here, through the `_traffic` and `_traffic_premium` suffixes on supported costing models. Stadia Maps traffic profiles carry current and historical conditions for over 80 countries.\n\nThis matters more for a matrix than for a single route. A dispatch decision made on free-flow speeds sends the wrong driver at 17:30, and the error compounds across every assignment in the batch. Traffic-influenced routing requires a Standard plan or higher.\n\n## Common Distance Matrix Use Cases\n\n- **Dispatch and driver assignment.** Score every available driver against every open job, then assign on the ranking rather than on straight-line distance.\n- **Store and branch locators.** Return the three nearest locations by drive time instead of by radius, which is the difference between a useful result and one with a river in the way.\n- **Delivery and service-area planning.** Feed the matrix into a solver. Stadia Maps documents integration with [OptaPlanner and VROOM](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F) for rich vehicle routing problems.\n- **Field sales territory design.** Cluster accounts by travel time from a rep's base rather than by postal code.\n- **Marketplace supply matching.** Rank nearby providers by how long they would actually take to arrive.\n\nFor the single-vehicle case, where you need the best order to visit a set of stops rather than a ranking, [Optimized Routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F) solves the traveling salesman shape directly.\n\n::faq-section\n---\nfaqs:\n  - question: What is a distance matrix API?\n    answer: A distance matrix API returns the travel time and distance between every\n      combination of a set of starting points and a set of destinations in one\n      request. The Stadia Maps Time\u002FDistance Matrix API lets you compare travel\n      times between a set of possible start and end points, using the same road\n      network and travel modes as the rest of the routing API.\n  - question: What is the difference between a distance matrix and a routing API?\n    answer: A routing API answers how to get from one place to another and returns\n      the path, geometry, and turn-by-turn instructions. A distance matrix\n      answers which of several places is closest and returns only times and\n      distances, with no route geometry. The common pattern is to call the\n      matrix first to choose a destination, then call routing for the pair you\n      selected.\n  - question: How is a distance matrix request billed on Stadia Maps?\n    answer: The Time\u002FDistance Matrix is billed at 10 credits per element, where an\n      element is one source-and-target pair. Standard routing is billed at 20\n      credits per request. Ranking 10 destinations from a single origin is 10\n      elements, or 100 credits, against 200 credits for the same work as 10\n      individual routing calls.\n  - question: How large can a distance matrix be?\n    answer: Matrix size is capped at 625 elements on the Standard plan and 10,000\n      elements on the Professional plan, where elements equal sources multiplied\n      by targets. There is also a distance limit of 400km for auto, bus, truck,\n      and taxi, and 200km for other travel modes. The service limits\n      documentation lists the caps that apply to each plan.\n  - question: Does a distance matrix account for traffic?\n    answer: It can. Traffic-influenced profiles are available through the _traffic\n      and _traffic_premium suffixes on supported costing models, and Stadia Maps\n      traffic profiles carry current and historical conditions for over 80\n      countries. Traffic-influenced routing requires a Standard plan or higher.\n  - question: What travel modes does the Stadia Maps matrix support?\n    answer: The documented costing options include auto, pedestrian, bicycle, truck,\n      taxi, and bus. The broader routing API also offers specialized profiles\n      for trucks, motor scooters, and other vehicle types.\n---\n::\n\n## Where to Go Next\n\n### Routing & Navigation\n\n- [What Is an Isochrone?](\u002Flearn\u002Fisochrones\u002F) for reachable-area questions rather than ranking questions\n- [What Is the Best Routing API?](\u002Flearn\u002Fbest-routing-api\u002F) for how to evaluate providers\n- [Time\u002FDistance Matrix API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F) for the full parameter set and limits\n- [Standard Routing API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F) for the navigate-this-pair call\n- [Routing overview docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F) for the full endpoint list\n- [Matrix Routing product page](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F) and [pricing tiers](\u002Fpricing\u002F)\n",{"title":5,"description":473},"learn\u002Fdistance-matrix-api","Distance Matrix","A table of travel times and distances between every combination of a set of starting points and a set of destinations.","NInlXlTlsjyqb-69Ohyj7Hu39Ysmc3X1Uup_zqqPWKY",[490,495,500],{"title":134,"description":491,"path":492,"published":493,"category":413,"rawbody":494},"Learn how isochrones work, what parameters matter, and how to generate one with the Stadia Maps Isochrone API.","\u002Flearn\u002Fisochrones","2026-07-14","---\ntitle: What Is an Isochrone?\ndescription: Learn how isochrones work, what parameters matter, and how to generate one with the Stadia Maps Isochrone API.\ncategory: Routing & Navigation\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-an-isochrone.png\nmodified: 2026-09-29\npublished: 2026-07-14\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is an isochrone map?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: An isochrone map displays one or more isochrone shapes, each connecting all points reachable within a set travel time or distance from a common starting point. Isochrone maps are used for site selection, accessibility analysis, service-area planning, and mobility studies.\n      - \"@type\": Question\n        name: What is the difference between an isochrone and an isodistance?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Isochrones measure reachability in units of time; isodistances measure reachability in units of distance. The Stadia Maps Isochrone API can be used to produce either by setting a time or distance value on each contour in the request.\n      - \"@type\": Question\n        name: What travel modes does the Stadia Maps Isochrone API support?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: The Stadia Maps Isochrone API supports nearly a dozen travel modes, including auto, bicycle, pedestrian, bus, taxi, and truck. Traffic-influenced variants exist for auto, bus, taxi, and truck. The full list is in the API reference.\n      - \"@type\": Question\n        name: Do isochrones account for traffic?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: They can. The Stadia Maps Isochrone API offers traffic-influenced profiles via _traffic and _traffic_premium suffixes on supported costing models. A traffic-influenced isochrone with an explicit date_time reflects live conditions and historical patterns; a static isochrone assumes average speeds. Traffic-influenced routing requires a Standard plan or higher.\n      - \"@type\": Question\n        name: How is an isochrone request billed on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Isochrone requests are billed as routing requests on the Stadia Maps API credit system. Contour count does not multiply the cost; a single request with three contours is a single billable request.\nterm: Isochrone\ntermDescription: A shape on a map showing everywhere reachable from a starting point within a set travel time or distance, given a mode of travel.\n---\n\nAn [isochrone](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIsochrone_map) is a shape on a map that shows everywhere you can reach from a starting point within a set travel time or distance, given a mode of travel. Also called a travel time map, isoline, or reachable range, an isochrone follows the road, path, or transit network, so the shape reflects how people actually move, not just how far a straight line goes. The [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) returns them as GeoJSON polygons or linestrings for driving, walking, cycling, and nearly a dozen other travel modes.\n\n## Key Takeaways\n\n- An isochrone shows everywhere reachable from a starting point within a set travel time or distance, based on the real road, path, or transit network.\n- Unlike a fixed-radius buffer, an isochrone accounts for road geometry, one-way streets, mode of travel, and (optionally) real-time traffic.\n- The Stadia Maps Isochrone API supports nearly a dozen travel modes, including driving, walking, cycling, bus, taxi, and truck.\n- Output is a GeoJSON FeatureCollection that renders directly in MapLibre GL JS, Leaflet, or any GeoJSON-aware map library.\n- Isochrones are the right tool for site selection, service-area planning, and accessibility analysis. They are not a substitute for routing (single ETA) or matrix (ranked distances).\n\n## Why Not Just Use a Radius for Isochrones?\n\nA fixed-radius buffer is fast, but for most real questions, it is wrong. A 10-minute drive out of downtown San Francisco covers a different area than a 10-minute drive out of suburban Phoenix. Highways, one-way streets, rivers with no bridges, transit availability, and pedestrian-only zones all bend the shape.\n\nCases where a radius breaks:\n\n- **Rivers and rail corridors.** A bridge or tunnel can be the only crossing for kilometers. A circle ignores that.\n- **One-way networks.** Driving out of a dense center is often slower than driving in. The reachable area is asymmetric.\n- **Mode mismatch.** A 15-minute walking radius reaches almost nothing on a road network built for cars, not people.\n- **Time of day.** A drive-time isochrone at 04:00 is much larger than the same isochrone at 17:30 when accounting for traffic.\n\nIf your product or application is making decisions based on who can reach a point quickly, then a radius is a meaningful penalty for accuracy. That is what the [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) is designed to fix.\n\n## How Isochrones Are Calculated\n\nIsochrone engines work in roughly the same way:\n\n1. Take the [road, path, and transit network](https:\u002F\u002Fwiki.openstreetmap.org\u002Fwiki\u002FRouting) as a graph.\n2. Assign a travel cost to every edge based on speed, mode, and any time-of-day model.\n3. Run a search outward from the origin, expanding by accumulated cost rather than distance.\n4. When the search hits each time or distance threshold, capture the reachable subgraph.\n5. Turn that subgraph into a polygon or linestring by buffering reachable edges and dissolving the result.\n\nStadia Maps runs isochrones on [Valhalla](https:\u002F\u002Fgithub.com\u002Fvalhalla\u002Fvalhalla), an open-source routing engine that Stadia Maps contributes to. Valhalla uses a tiled, multimodal graph and supports per-mode costing models, which is why the same endpoint can produce a useful pedestrian, bicycle, or automobile isochrone without swapping engines. For more on how the Stadia Maps routing stack fits together, see the [Routing overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F).\n\n## Isochrone Parameters That Matter\n\nThe [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) exposes the parameters that actually change the shape.\n\n- **`locations`**: The starting point (latitude and longitude). Required.\n- **`costing`**: The travel mode. Options include `auto`, `bicycle`, `pedestrian`, `bus`, `taxi`, and `truck`, among others. The full list is in the [API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fapi-reference\u002F).\n- **`contours`**: One or more time or distance thresholds. Each contour can carry a `color` that is echoed back in the response for direct rendering.\n- **`polygons`**: Set to `true` for filled polygons or `false` for linestrings. Use linestrings for accessibility plots or overlay layers.\n- **`date_time`**: For traffic-influenced modes, the departure or arrival time. Skipping this defaults to average conditions.\n\nTwo more that are less obvious but matter in production:\n\n- **`denoise`**: Removes small disconnected fragments below a relative size threshold. Lower it if you need to see remote islands of reachability.\n- **`generalize`**: Simplification tolerance in meters. Lower numbers produce more detailed shapes and larger payloads.\n\n## How Traffic Changes an Isochrone\n\nFor automobile, bus, taxi, and truck modes, the Stadia Maps Isochrone API supports [traffic-influenced profiles](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F#traffic-influenced-profiles) via the `_traffic` and `_traffic_premium` suffixes. `auto_traffic` and `truck_traffic_premium` are two examples.\n\nTraffic-influenced isochrones combine live conditions with historical data, so a rush-hour isochrone is typically smaller than the same isochrone at 03:00. If your product uses isochrones for logistics, dispatch, or delivery-zone decisions, a static-speed isochrone will overstate reachability during peak hours.\n\nTraffic-influenced routing requires a Standard plan or higher. See the [pricing page](\u002Fpricing\u002F) for plan details.\n\n## How Do You Generate an Isochrone?\n\nHere is what a request to the Stadia Maps Isochrone API looks like. This example asks for a 5-minute pedestrian isochrone from a point in Tallinn, Estonia.\n\n```http\nPOST https:\u002F\u002Fapi.stadiamaps.com\u002Fisochrone\u002Fv1\nContent-Type: application\u002Fjson\n\n{\n  \"locations\": [{\"lat\": 59.436884, \"lon\": 24.742595}],\n  \"costing\": \"pedestrian\",\n  \"contours\": [{\"time\": 5, \"color\": \"aabbcc\"}],\n  \"polygons\": true\n}\n```\n\nThe response is a [GeoJSON](https:\u002F\u002Fdatatracker.ietf.org\u002Fdoc\u002Fhtml\u002Frfc7946) `FeatureCollection` with one feature per contour. It renders directly in [MapLibre GL JS](https:\u002F\u002Fmaplibre.org\u002F), Leaflet, or any GeoJSON-aware renderer.\n\nFor runnable code in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Stadia Maps Isochrone API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F). A step-by-step MapLibre GL JS walkthrough is in the [Display Isochrones on a Map tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fdisplay-isochrones-on-a-map\u002F).\n\n## Where Isochrones Fall Short\n\nIsochrones are not always the right tool. Beyond the parameter details in the [Isochrones documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F), here are the practical patterns worth knowing:\n\n- **Very small time bands are noisy.** A 1-minute isochrone is mostly buffer around the origin. For travel times below a few minutes, results depend heavily on off-road buffering rather than on real network travel, so use very short contours with caution.\n- **Static isochrones do not reflect traffic.** Without a `date_time` parameter, automobile isochrones can dramatically overstate reachability at rush hour or understate it at night.\n- **Cross-provider comparisons rarely agree.** Two providers will produce different polygons for the same origin because they use different graphs, different speed models, and different generalization settings. Standardize on a single provider for consistency across your product.\n- **Isochrones describe geographic reachability, not service areas.** Delivery zones, minimum-order distances, and exclusion rules are business logic that should sit on top of the isochrone, not inside it.\n\n## Isochrone vs. Matrix vs. Routing: Which Do You Need?\n\nThe [Stadia Maps Routing API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F) family includes several related endpoints. Pick the right one:\n\n- For a single point-to-point travel time or ETA, use [standard routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F). It is cheaper and more precise than an isochrone.\n- For \"which of these N destinations is closest by drive time,\" use the [Time\u002FDistance Matrix API](\u002Flearn\u002Fdistance-matrix-api\u002F). Isochrones describe an area, not a ranking.\n- For service-area billing logic, compute the isochrone once, store the polygon, and query against it. Recomputing on every request wastes API credits.\n\n## Common Isochrone Use Cases\n\nIsochrones answer questions where a \"how far in time\" constraint matters more than a \"how far in miles\" constraint. The [Stadia Maps Isochrones product page](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F) frames it as \"reachable range decision-making\" and lists example questions this API commonly answers:\n\n- **Site selection.** Retail, healthcare, and logistics teams compare reachable population, demographics, or competitor density inside a drive-time band. A 20-minute isochrone is a better proxy for catchment than a 10-mile radius.\n- **Accessibility and mobility analysis.** Walking or transit isochrones show real access to schools, clinics, or grocery stores, not just distance.\n- **EV and fuel planning.** A driving isochrone with a distance constraint answers \"what is reachable in the last 20 miles before I need to charge or refuel?\"\n- **Marketplace coverage.** When a merchant joins a delivery platform, an isochrone defines the visible service area.\n- **Real estate search.** Filtering listings by \"30 minutes from my office by transit\" is an isochrone query against a property index.\n\n## Frequently Asked Questions\n\n### What is an isochrone map?\n\nAn isochrone map displays one or more isochrone shapes, each connecting all points reachable within a set travel time or distance from a common starting point. Isochrone maps are used for site selection, accessibility analysis, service-area planning, and mobility studies.\n\n### What is the difference between an isochrone and an isodistance?\n\nIsochrones measure reachability in units of time; isodistances measure reachability in units of distance. The [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) can be used to produce either by setting a `time` or `distance` value on each contour in the request.\n\n### What travel modes does the Stadia Maps Isochrone API support?\n\nThe [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) supports nearly a dozen travel modes, including `auto`, `bicycle`, `pedestrian`, `bus`, `taxi`, and `truck`. Traffic-influenced variants exist for `auto`, `bus`, `taxi`, and `truck`. The full list is in the [API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fapi-reference\u002F).\n\n### Do isochrones account for traffic?\n\nThey can. The Stadia Maps Isochrone API offers [traffic-influenced profiles](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F#traffic-influenced-profiles) via `_traffic` and `_traffic_premium` suffixes on supported costing models. A traffic-influenced isochrone with an explicit `date_time` reflects live conditions and historical patterns; a static isochrone assumes average speeds. Traffic-influenced routing requires a Standard plan or higher.\n\n### How is an isochrone request billed on Stadia Maps?\n\nIsochrone requests are billed as routing requests on the [Stadia Maps API](\u002Fpricing\u002F) credit system. Contour count does not multiply the cost; a single request with three contours is a single billable request.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on isochrones and adjacent routing topics:\n\n- [The Invisible Costs of Routing: Privacy, Pricing & the MAU Trap](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F)\n- [Beyond the Car: Routing for the Other 90% of Transport](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F)\n- [Why Basic OSM Routing Needs Real-Time Traffic](\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F)\n- [Traffic-Influenced Routing Is Here (Public Preview)](\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F)\n\n### Routing & Navigation\n\n- [What Is a Distance Matrix API?](\u002Flearn\u002Fdistance-matrix-api\u002F) for ranking destinations rather than mapping a reachable area\n- [Isochrones API documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) for the full parameter set\n- [Display Isochrones on a Map tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fdisplay-isochrones-on-a-map\u002F) with a working MapLibre GL JS example\n- [Standard Routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F) for a single point-to-point ETA\n- [Time\u002FDistance Matrix](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F) for ranked distances to many destinations\n- [Stadia Maps Isochrones product page](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F) and pricing tiers\n- [Matrix Routing product page](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F)\n",{"title":426,"description":496,"path":497,"published":498,"category":413,"rawbody":499},"The best routing API depends on your use case. Compare data sources, pricing, feature coverage, and privacy across major routing APIs including Stadia Maps.","\u002Flearn\u002Fbest-routing-api","2026-08-19","---\ntitle: What Is the Best Routing API?\ndescription: The best routing API depends on your use case. Compare data sources, pricing, feature coverage, and privacy across major routing APIs including Stadia Maps.\nauthor: Stadia Maps Team\ncategory: Routing & Navigation\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-the-best-routing-api.png\npublished: 2026-08-19\nmodified: 2026-09-21\nterm: Routing API\ntermDescription: An HTTP service that returns turn-by-turn directions, travel time estimates, and route geometry between two or more geographic points.\n---\n\nThe best routing API depends on what you are building. A logistics platform routing thousands of trucks has different needs than a hiking app plotting a walking route. Rather than name a single winner, this page walks through what to evaluate when comparing routing APIs, describes what the [Stadia Maps Routing API](\u002Fproducts\u002Frouting-navigation\u002F) offers, and links to Stadia Maps' own published comparisons for context.\n\n## Key Takeaways\n\n- No single routing API is \"best\" for every use case. The right choice depends on data sources, feature coverage, pricing model, storage rights, and privacy posture.\n- The [Stadia Maps Routing API](\u002Fproducts\u002Frouting-navigation\u002F) covers turn-by-turn directions, matrix, isochrones, optimized routing, map matching, road information, and traffic-influenced routing under one unified [credit-based pricing model](\u002Fpricing\u002F).\n- Stadia Maps' routing is built on [Valhalla](https:\u002F\u002Fgithub.com\u002Fvalhalla\u002Fvalhalla), an open-source routing engine Stadia Maps contributes to.\n- [Traffic-Influenced Routing](\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F) adds live and predictive traffic data from TomTom (600M+ connected devices) on top of the same API.\n- [Ferrostar](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F), Stadia Maps' navigation SDK, is a BSD-licensed, cross-platform (iOS, Android, PWA) SDK with a Rust core.\n\n## What Makes a Routing API \"Best\"?\n\nSix evaluation dimensions matter for most developer teams:\n\n- **Data sources.** Where the road network, speed limits, and place names come from. OpenStreetMap-based vendors have community-updated data and open licensing. Proprietary vendors have more control over data curation but limited transparency into updates.\n- **Feature coverage.** Does the API include the core primitives you need: turn-by-turn directions, travel time matrix, isochrones, route optimization, map matching, road attributes, elevation, traffic-influenced ETAs?\n- **Pricing model.** Is billing usage-based (per-request or per-credit) or MAU-based (per active user)? MAU pricing penalizes growth; usage-based pricing scales with actual API calls. Stadia Maps' post [The Invisible Costs of Routing](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F) walks through this trade-off in detail.\n- **Storage rights.** Can you cache and persist routing results in your database? Some vendors restrict long-term storage or charge multiples of the request price for it. On Stadia Maps, storing routing results permanently requires a custom agreement.\n- **Developer experience.** Availability of SDKs, quality of documentation, code examples, and support. Stadia Maps ships [official SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Foverview\u002F) for TypeScript, Python, Kotlin, Swift, and PHP, plus platform-specific navigation and search SDKs.\n- **Privacy posture.** Does the vendor track end users, require SDK telemetry, or sell data? For regulated industries (healthcare, finance, government), this can be a hard requirement rather than a preference.\n\n## What Does the Stadia Maps Routing API Offer?\n\nThe [Stadia Maps Routing API](\u002Fproducts\u002Frouting-navigation\u002F) provides the following primitives, all served from one API and billed from one unified [credit pool](\u002Fpricing\u002F):\n\n- **[Turn-by-Turn Directions](\u002Fproducts\u002Frouting-navigation\u002Fturn-by-turn-directions\u002F).** Reliable routing with precise turn-by-turn guidance, distance, and travel time calculations. Available for driving, walking, cycling, bus, taxi, truck, and more. 20 credits per request.\n- **[Optimized Routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Foptimized-routing\u002F).** Ordered stops for multi-point routing (a TSP-style problem). 40 credits per request.\n- **[Time\u002FDistance Matrix](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F).** Rapid calculation of travel times and distances between many origins and destinations. 10 credits per element. 625-element limit on the Standard plan; 10,000-element limit on Professional.\n- **[Isochrones](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F).** Reachable areas from a point within a set time or distance. 20 credits per request. See the companion [What Is an Isochrone?](\u002Flearn\u002Fisochrones\u002F) page for a deeper walkthrough.\n- **[Map Matching](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fmap-matching\u002F).** Snap a GPS trace to the road network. 20 credits per request.\n- **[Road Information](\u002Fproducts\u002Frouting-navigation\u002Froad-information\u002F).** Nearest street, speed limits, grades, surface quality, and other road attributes. 20 credits per request.\n- **[Elevation](\u002Fproducts\u002Frouting-navigation\u002Felevation\u002F).** Elevation at a point or along a route. 5 credits per request.\n- **[Traffic-Influenced Routing](\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F).** Live and predictive traffic on top of the same routing endpoints, powered by TomTom's data from 600 million connected devices. 60 credits per request for adaptive traffic; 120 credits for premium.\n\nFor mobile apps, [Ferrostar](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F) adds real-time navigation with turn-by-turn guidance, powered by the same routing and road information endpoints. Ferrostar is cross-platform (Android, iOS, PWA), uses a Rust core for memory safety and performance, and is BSD-licensed open source.\n\n## How Does Stadia Maps Routing Compare?\n\nStadia Maps has published several posts that explain how its approach differs from the routing status quo. Each is grounded in a specific technical or business trade-off, not marketing framing.\n\n- **On MAU-based pricing and telemetry.** [The Invisible Costs of Routing: Privacy, Pricing, and Avoiding the \"MAU\" Trap](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F) explains why most mapping SDKs harvest user data and charge by monthly active user, and how Stadia Maps' usage-based billing avoids both.\n- **On OSM plus traffic.** [Why Basic OpenStreetMap Routing Needs Real-Time Traffic](\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F) explains why raw OSM routing is a static dataset, how algorithmic ETAs fall apart in production logistics, and how Stadia Maps closes the gap with TomTom-powered traffic data.\n- **On modal-specific routing.** [Beyond the Car: Routing for the Other 90% of Transport](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F) covers why car-first routing APIs fail trucks, e-bikes, and low-speed vehicles, and how Valhalla plus OSM lets Stadia Maps handle modal-specific constraints.\n- **On traffic-influenced routing launch.** [Traffic-Influenced Routing Is Here (Public Preview)](\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F) covers the addition of live and historical TomTom traffic to routing, optimized routing, map matching, isochrones, and matrices across 80+ countries.\n\nFor direct vendor-by-vendor migration comparisons, Stadia Maps maintains dedicated switch pages: [Switch from Google](\u002Fswitch-to-stadia\u002Ffrom-google\u002F), [Switch from Mapbox](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F), and [Switch from MapTiler](\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F). Those pages are the authoritative source for pricing and feature comparisons across those specific vendors.\n\n## What Are the Major Routing API Options?\n\nThe mainstream commercial routing APIs available to developers include Google Maps Platform, Mapbox, HERE Technologies, TomTom, and Stadia Maps. Each has a different data foundation and product focus. Beyond the commercial options, Valhalla (which Stadia Maps contributes to) is a leading open-source routing engine that can be self-hosted.\n\nBecause vendor pricing and features change frequently, the most reliable way to compare specifics is to check each vendor's own pricing and API reference pages at the time you evaluate. Stadia Maps' Switch pages linked in the previous section are the current, maintained source for detailed pairwise comparisons.\n\n## Which Routing API Is Best for Your Use Case?\n\nDifferent applications have different constraints. Here is how the Stadia Maps Routing API fits several common use cases, based on the product pages and blog posts linked above:\n\n- **Logistics and last-mile delivery.** Traffic-Influenced Routing plus Matrix Routing plus Optimized Routing cover fleet ETAs, service-area analysis, and multi-stop planning.\n- **Multi-modal mobility (trucks, e-bikes, LSVs, transit).** Valhalla-backed routing supports per-mode costing models. The [Beyond the Car blog post](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F) covers this in depth.\n- **Consumer navigation apps.** [Ferrostar](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F) provides a cross-platform navigation SDK for Android, iOS, and PWAs, with a Rust core and BSD-licensed open source code.\n- **Regulated industries (healthcare, finance, government).** Stadia Maps' privacy posture (no end-user tracking, no SDK telemetry, no data resale) and [EU-only endpoints](https:\u002F\u002Fdocs.stadiamaps.com\u002Feu-gdpr-endpoints\u002F) make it a fit where compliance and data residency matter.\n- **Teams with unpredictable growth.** Credit-based pricing avoids MAU billing shock. The [pricing page](\u002Fpricing\u002F) has fixed credit pools per plan and opt-in overages.\n- **On-premises or embedded deployments.** Stadia Maps offers [On-Prem and Embedded Solutions](\u002Fproducts\u002Fon-prem-embedded\u002F) for teams that need to run the stack in their own environment.\n\n## What Are Common Routing API Pricing Models?\n\nRouting APIs typically bill in one of three ways:\n\n- **Per-request or per-credit.** Every API call has a fixed cost. Growth in usage scales linearly with billing. Stadia Maps uses this model with a unified credit pool.\n- **Per monthly active user (MAU).** Billing scales with the number of end users, not API calls. Popular in navigation SDKs. Discussed in [The Invisible Costs of Routing](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F).\n- **Enterprise contract.** Custom pricing negotiated for high-volume or on-premises deployments.\n\nFor teams doing a real cost comparison, Stadia Maps' [pricing page](\u002Fpricing\u002F) has the full credit schedule per feature, and the switch pages for [Google](\u002Fswitch-to-stadia\u002Ffrom-google\u002F), [Mapbox](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F), and [MapTiler](\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F) include pairwise cost breakdowns.\n\n::faq-section\n---\nfaqs:\n  - question: What is a routing API?\n    answer: A routing API is an HTTP service that returns turn-by-turn directions,\n      travel time estimates, and route geometry between two or more geographic\n      points. Modern routing APIs typically also support travel time matrices\n      between many origins and destinations, isochrones (reachable areas), route\n      optimization for multiple stops, map matching for GPS traces, and\n      traffic-influenced ETAs.\n  - question: What should you evaluate when choosing a routing API?\n    answer: \"The main dimensions to evaluate are: data sources (OpenStreetMap versus\n      proprietary), feature coverage (routing, matrix, isochrones, optimization,\n      map matching, traffic), pricing model (usage-based versus MAU-based),\n      storage rights, developer experience (SDKs, docs, support), and privacy\n      posture.\"\n  - question: Which routing API is best for privacy-conscious apps?\n    answer: Stadia Maps does not track end users, does not require SDK telemetry,\n      and does not sell data to advertisers. The Stadia Maps blog post The\n      Invisible Costs of Routing walks through how MAU-based pricing and SDK\n      telemetry work at other vendors and why the Stadia Maps usage-based model\n      is different. EU-only endpoints are also available for teams with\n      data-residency requirements.\n  - question: Can I self-host a routing engine?\n    answer: Yes. Valhalla is an open-source routing engine you can self-host. Stadia\n      Maps contributes to Valhalla and offers on-premises and embedded\n      deployment options for teams that need to run the stack in their own\n      environment.\n  - question: How much does Stadia Maps routing cost?\n    answer: Stadia Maps uses a unified credit pool. Standard routing, map matching,\n      nearest roads, trace attributes, and isochrones cost 20 credits per\n      request. Optimized routing costs 40 credits per request. Time\u002Fdistance\n      matrix is 10 credits per element. Traffic-influenced profiles are 60 or\n      120 credits per request depending on tier. Plans start free with 200,000\n      credits per month and scale to Professional at $250 per month for 25\n      million credits.\n  - question: What is the difference between a routing API and a navigation SDK?\n    answer: \"A routing API returns route data (geometry, distance, ETA, turn-by-turn\n      instructions) over HTTP. A navigation SDK is a client-side library that\n      consumes route data and drives an interactive navigation experience,\n      including live location tracking, off-route detection, rerouting, and\n      turn-by-turn guidance. Stadia Maps ships both: the Routing API for the\n      data, and Ferrostar for the client-side navigation experience.\"\n---\n::\n\n## Where to Go Next\n\n### From the Blog\n\nMore on routing and navigation from the Stadia Maps blog:\n\n- [The Invisible Costs of Routing: Privacy, Pricing, and Avoiding the \"MAU\" Trap](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F)\n- [Beyond the Car: Routing for the Other 90% of Transport](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F)\n- [Why Basic OpenStreetMap Routing Needs Real-Time Traffic](\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F)\n- [Traffic-Influenced Routing Is Here (Public Preview)](\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F)\n- [Fall 2024 Credit Schedule Updates](\u002Fblog\u002F2024-matrix-navigation-credit-updates\u002F)\n\n### Routing & Navigation\n\n- [Routing & Navigation product overview](\u002Fproducts\u002Frouting-navigation\u002F)\n- [Turn-by-Turn Directions](\u002Fproducts\u002Frouting-navigation\u002Fturn-by-turn-directions\u002F)\n- [Matrix Routing](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F)\n- [Isochrones](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F) and the [What Is an Isochrone?](\u002Flearn\u002Fisochrones\u002F) page\n- [Traffic-Influenced Routing](\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F)\n- [Ferrostar Navigation SDK](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F)\n- [Road Information](\u002Fproducts\u002Frouting-navigation\u002Froad-information\u002F)\n- [Elevation](\u002Fproducts\u002Frouting-navigation\u002Felevation\u002F)\n- [Routing docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F) for the full API reference\n- [Switch from Google](\u002Fswitch-to-stadia\u002Ffrom-google\u002F), [Switch from Mapbox](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F), and [Switch from MapTiler](\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F) for detailed vendor comparisons\n- [Stadia Maps pricing](\u002Fpricing\u002F) for the credit schedule\n",{"title":8,"description":501,"path":9,"published":502,"category":503,"rawbody":504},"Most geocoding providers restrict or surcharge storing results. Learn what geocoding storage rights are, what they cost, and which Stadia Maps plans allow it.","2026-09-15","Geocoding & Search","---\ntitle: Can You Store Geocoding Results?\ndescription: Most geocoding providers restrict or surcharge storing results. Learn what geocoding storage rights are, what they cost, and which Stadia Maps plans allow it.\nauthor: Stadia Maps Team\ncategory: Geocoding & Search\nimage: \u002Fimages\u002Fog\u002Fcan-you-store-geocoding-results.png\nimageAlt: Can You Store Geocoding Results? — Stadia Maps\nhead:\n  script: []\npublished: 2026-09-15\nterm: Geocoding Storage Rights\ntermDescription: The contractual terms governing whether and for how long a developer may retain geocoding results in their own database.\n---\n\nIt depends on your provider, and the answer is often no, or yes at a significant surcharge. Geocoding storage rights are the contractual terms governing whether you can save a returned coordinate in your own database and for how long. Most teams do not discover the restriction until they are already at scale. On Stadia Maps, permanent storage is included on Standard plans and above with no per-request surcharge.\n\n## Key Takeaways\n\n- Geocoding storage rights govern whether you can retain a returned coordinate in your own database, and for how long.\n- Per Stadia Maps' analysis, Mapbox, AWS, and ESRI often charge between 6x and 8x the cost of a regular query if you intend to store the result.\n- Google's restrictions generally forbid caching for anything other than a specific end-user session.\n- Stadia Maps allows permanent storage on Standard, Professional, and Enterprise plans with no extra fees and no per-user re-validation.\n- Temporary storage in the normal course of work is allowed on all Stadia Maps plans, including Free.\n\n## What Are Geocoding Storage Rights?\n\nWhen you geocode an address, the provider returns coordinates. The question of whether those coordinates are yours to keep is a licensing question, not a technical one. Nothing stops you from writing the response to a database. The terms of service determine whether you are allowed to.\n\nProviders generally distinguish two cases:\n\n- **Temporary storage.** Holding a result in memory or a short-lived cache during the normal course of a request or session.\n- **Permanent storage.** Writing a result to your own database and retaining it indefinitely.\n\nNearly every provider allows the first. The second is where terms diverge sharply, and where costs can appear that were not in your original estimate.\n\n## What Does the Caching Tax Cost?\n\nStadia Maps published an analysis of this in [The Hidden Cost of Search](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F). Its findings on the industry:\n\n- **Mapbox, AWS, and ESRI** often charge between **6x and 8x** the cost of a regular query if you intend to store the result.\n- **Google** employs complex restrictions that generally forbid caching for anything other than a specific end-user session.\n\nThe practical effect is that a cost model built on query volume can be off by a large multiple once storage enters the picture. A team that geocodes a million addresses once and stores the results is doing something very different, contractually, from a team that geocodes a million times and discards each result.\n\nThe same post notes a related constraint worth checking: Google often prevents displaying its geocoding results on a map from another provider. Storage rights and display rights are separate terms, and both can create lock-in.\n\n## What Does Stadia Maps Allow?\n\nPer the [Stadia Maps geocoding documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F) and the [pricing page](\u002Fpricing\u002F):\n\n- **Temporary storage** in the normal course of your work is allowed on **all plans**, including Free.\n- **Permanent storage** (for example, writing results to a database) requires an active **Standard, Professional, or Enterprise** subscription.\n- There is **no per-request storage surcharge**, no per-user re-validation, and no permanent storage fee. Results can be cached as long as the subscription is active.\n\nThe governing language is in Section 8 of the [Terms of Service](\u002Fterms-of-service\u002F), which lists among prohibited uses \"permanently storing results for future use (e.g., as a database column), in part or in whole, from the Stadia Maps Geocoding APIs without an active Standard, Professional, or Enterprise subscription with appropriate permissions.\"\n\nOn the pricing page's feature comparison, storage rights appear directly in the plan table: Free and Starter show temporary storage, while Standard and Professional show persistent storage.\n\n## How Storage Rights Change Your Architecture\n\nStorage terms are not just a line item. They shape how you can build.\n\n**If permanent storage is allowed**, you can geocode once and reuse. Address normalization at signup, a one-time backfill of a customer table, or a nightly enrichment job all become straightforward. Your ongoing API cost tracks new addresses rather than total lookups.\n\n**If permanent storage is restricted**, you have to re-geocode. That means either repeated API calls for the same addresses, or a session-scoped cache that gets discarded. Your cost tracks usage volume rather than unique addresses, and the gap between those two numbers grows as your product matures.\n\nThe difference compounds. A marketplace with a hundred thousand stable listings and heavy repeat browsing has wildly different bills under the two models.\n\nStorage is one of several terms that only show up once you are past a free tier. For the others, see [What Does a \"Free\" Map API Actually Cost?](\u002Flearn\u002Fwhat-does-a-free-map-api-cost\u002F)\n\n## Where This Gets Complicated\n\nA few things worth knowing before you architect around storage rights.\n\n- **Terms change.** Provider pricing and licensing get revised. What is allowed today may carry a surcharge on renewal. Check the current terms rather than relying on a comparison written last year, including this one.\n- **Storage and display rights are separate.** A provider may allow you to store a coordinate but restrict where you can display it. Check both.\n- **Downgrading has consequences.** If permanent storage is tied to a plan tier, dropping to a lower tier may affect your right to retain data you already stored. Ask before you downgrade.\n- **This is a summary, not the contract.** The [Terms of Service](\u002Fterms-of-service\u002F) govern. If storage rights are material to your business, have someone read them.\n- **Other providers' terms are their own.** The figures above come from Stadia Maps' published analysis. Verify against each provider's current terms directly before making a decision.\n\n::faq-section\n---\nfaqs:\n  - question: Can you store geocoding results in a database?\n    answer: It depends on the provider. On Stadia Maps, permanent storage of\n      geocoding results in your own database is allowed with an active Standard,\n      Professional, or Enterprise subscription, with no per-request surcharge.\n      Temporary storage in the normal course of work is allowed on all plans\n      including Free. Other providers commonly restrict permanent storage or\n      charge a premium for it.\n  - question: What is the geocoding caching tax?\n    answer: The caching tax refers to the premium some geocoding providers charge to\n      store results long-term rather than discard them after use. According to\n      Stadia Maps' published analysis, Mapbox, AWS, and ESRI often charge\n      between 6x and 8x the cost of a regular query when results will be stored.\n      Google's terms generally forbid caching outside a specific end-user\n      session.\n  - question: What is the difference between temporary and permanent geocoding storage?\n    answer: Temporary storage means holding a result in memory or a short-lived\n      cache during the normal course of a request or session. Permanent storage\n      means writing the result to your own database and retaining it\n      indefinitely. Nearly every provider allows temporary storage. Permanent\n      storage is where terms diverge and where surcharges typically apply.\n  - question: Which Stadia Maps plans allow permanent geocoding storage?\n    answer: Permanent storage requires an active Standard, Professional, or\n      Enterprise subscription. Temporary storage in the normal course of your\n      work is allowed on all plans, including Free and Starter. There are no\n      extra fees, no per-user re-validation, and no permanent storage surcharges\n      on plans that include it.\n  - question: Why do geocoding storage rights matter for cost?\n    answer: Storage rights determine whether your API cost tracks unique addresses\n      or total lookups. If you can geocode once and store the result, ongoing\n      cost scales with new addresses. If you must re-geocode, cost scales with\n      usage volume. For products with stable data and heavy repeat access, the\n      difference between those two models compounds significantly.\n---\n::\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding costs and terms from the Stadia Maps blog:\n\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [Bulk Geocoding API Is Now Available](\u002Fblog\u002Fquickly-geocode-thousands-of-addresses-with-bulk-geocoding\u002F)\n- [The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n\n### Geocoding & Search\n\n- [What Is the Best Geocoding API?](\u002Flearn\u002Fbest-geocoding-api\u002F) for how storage rights compare against the other evaluation criteria\n- [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for how geocoding works and where the data comes from\n- [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F) for the coordinates-to-address direction\n- [What Is Address Autocomplete?](\u002Flearn\u002Faddress-autocomplete\u002F) for search-as-you-type\n- [Bulk Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F) for processing up to 5,000 addresses per request\n- [Forward Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F)\n- [Geocoding product page](\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F)\n- [Pricing and plan comparison](\u002Fpricing\u002F) for the storage rights table\n- [Terms of Service](\u002Fterms-of-service\u002F) for the full legal terms\n",{"id":506,"bio":479,"extension":18,"jobTitle":479,"meta":507,"name":508,"sameAs":509,"slug":512,"stem":513,"twitterCreator":479,"type":514,"url":515,"__hash__":516},"authors\u002Fauthors\u002Fstadia-maps.yml",{},"Stadia Maps",[510,511],"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fstadia-maps\u002F","https:\u002F\u002Fgithub.com\u002Fstadiamaps","stadia-maps","authors\u002Fstadia-maps","Organization","https:\u002F\u002Fstadiamaps.com\u002F","jRSutfRcYEknA-OSdkWoPHgm7Iep6BJfLBIsMtzQONk",1790691916515]