[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-\u002Fblog\u002Fintegrate-legal-land-description-api-canada":3},{"id":4,"title":5,"body":6,"cover":1343,"date":1344,"description":1345,"extension":1346,"meta":1347,"navigation":474,"path":1350,"seo":1351,"stem":1352,"tags":1353,"__hash__":1358},"blog\u002Fblog\u002Fintegrate-legal-land-description-api-canada.md","How to Integrate Canadian Legal Land Descriptions into Your Application Using the Township Canada API",{"type":7,"value":8,"toc":1331},"minimark",[9,18,21,24,29,38,41,51,54,329,332,339,343,356,359,365,372,376,379,685,690,693,703,850,858,978,981,985,993,999,1002,1006,1009,1020,1157,1169,1173,1176,1225,1229,1232,1288,1295,1299,1324,1327],[10,11,12,13,17],"p",{},"A property management platform in Edmonton had a problem. Their database held 4,000 well site locations — all in DLS format like ",[14,15,16],"code",{},"LSD 14-27-048-05W5",". Their map component needed GPS coordinates. A legal land description API in Canada would solve this, but building a conversion engine from raw survey data would take months of work.",[10,19,20],{},"One GET request to the Township Canada API handled the individual lookup. A batch endpoint handled the rest. Within an afternoon, the team had GPS coordinates and boundary polygons for every location in the database.",[10,22,23],{},"If your application works with Canadian land data — well sites, rural properties, field boundaries, mineral rights — here's how to add that same conversion capability.",[25,26,28],"h2",{"id":27},"what-the-api-returns","What the API Returns",[10,30,31,32,37],{},"The ",[33,34,36],"a",{"href":35},"\u002Fguides\u002Fsearch-api-guide","Township Canada Search API"," accepts a legal land description and returns a GeoJSON response with GPS coordinates and a boundary polygon. It handles DLS, LSD, NTS, FPS, Ontario lot\u002Fconcession, and every other major Canadian survey system through a single endpoint.",[10,39,40],{},"A basic request:",[42,43,48],"pre",{"className":44,"code":46,"language":47},[45],"language-text","GET https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=LSD+14-27-048-05W5\n","text",[14,49,46],{"__ignoreMap":50},"",[10,52,53],{},"The response:",[42,55,59],{"className":56,"code":57,"language":58,"meta":50,"style":50},"language-json shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","{\n  \"type\": \"FeatureCollection\",\n  \"features\": [{\n    \"type\": \"Feature\",\n    \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [[...]] },\n    \"properties\": {\n      \"search_term\": \"LSD 14-27-048-05W5\",\n      \"legal_location\": \"LSD 14-27-048-05W5\",\n      \"unit\": \"Legal Subdivision\",\n      \"survey_system\": \"DLS\",\n      \"province\": \"Alberta\"\n    }\n  }]\n}\n","json",[14,60,61,70,100,115,137,193,208,229,249,270,291,311,317,323],{"__ignoreMap":50},[62,63,66],"span",{"class":64,"line":65},"line",1,[62,67,69],{"class":68},"soVBu","{\n",[62,71,73,77,81,84,87,91,95,97],{"class":64,"line":72},2,[62,74,76],{"class":75},"s4Jsk","  \"",[62,78,80],{"class":79},"sLorS","type",[62,82,83],{"class":75},"\"",[62,85,86],{"class":68},":",[62,88,90],{"class":89},"sbYkP"," \"",[62,92,94],{"class":93},"sTbE_","FeatureCollection",[62,96,83],{"class":89},[62,98,99],{"class":68},",\n",[62,101,103,105,108,110,112],{"class":64,"line":102},3,[62,104,76],{"class":75},[62,106,107],{"class":79},"features",[62,109,83],{"class":75},[62,111,86],{"class":68},[62,113,114],{"class":68}," [{\n",[62,116,118,121,124,126,128,130,133,135],{"class":64,"line":117},4,[62,119,120],{"class":75},"    \"",[62,122,80],{"class":123},"sa2tF",[62,125,83],{"class":75},[62,127,86],{"class":68},[62,129,90],{"class":89},[62,131,132],{"class":93},"Feature",[62,134,83],{"class":89},[62,136,99],{"class":68},[62,138,140,142,145,147,149,152,154,157,159,161,163,166,168,171,173,176,178,180,183,187,190],{"class":64,"line":139},5,[62,141,120],{"class":75},[62,143,144],{"class":123},"geometry",[62,146,83],{"class":75},[62,148,86],{"class":68},[62,150,151],{"class":68}," {",[62,153,90],{"class":75},[62,155,80],{"class":156},"skNjk",[62,158,83],{"class":75},[62,160,86],{"class":68},[62,162,90],{"class":89},[62,164,165],{"class":93},"Polygon",[62,167,83],{"class":89},[62,169,170],{"class":68},",",[62,172,90],{"class":75},[62,174,175],{"class":156},"coordinates",[62,177,83],{"class":75},[62,179,86],{"class":68},[62,181,182],{"class":68}," [[",[62,184,186],{"class":185},"srjyR","...",[62,188,189],{"class":68},"]]",[62,191,192],{"class":68}," },\n",[62,194,196,198,201,203,205],{"class":64,"line":195},6,[62,197,120],{"class":75},[62,199,200],{"class":123},"properties",[62,202,83],{"class":75},[62,204,86],{"class":68},[62,206,207],{"class":68}," {\n",[62,209,211,214,217,219,221,223,225,227],{"class":64,"line":210},7,[62,212,213],{"class":75},"      \"",[62,215,216],{"class":156},"search_term",[62,218,83],{"class":75},[62,220,86],{"class":68},[62,222,90],{"class":89},[62,224,16],{"class":93},[62,226,83],{"class":89},[62,228,99],{"class":68},[62,230,232,234,237,239,241,243,245,247],{"class":64,"line":231},8,[62,233,213],{"class":75},[62,235,236],{"class":156},"legal_location",[62,238,83],{"class":75},[62,240,86],{"class":68},[62,242,90],{"class":89},[62,244,16],{"class":93},[62,246,83],{"class":89},[62,248,99],{"class":68},[62,250,252,254,257,259,261,263,266,268],{"class":64,"line":251},9,[62,253,213],{"class":75},[62,255,256],{"class":156},"unit",[62,258,83],{"class":75},[62,260,86],{"class":68},[62,262,90],{"class":89},[62,264,265],{"class":93},"Legal Subdivision",[62,267,83],{"class":89},[62,269,99],{"class":68},[62,271,273,275,278,280,282,284,287,289],{"class":64,"line":272},10,[62,274,213],{"class":75},[62,276,277],{"class":156},"survey_system",[62,279,83],{"class":75},[62,281,86],{"class":68},[62,283,90],{"class":89},[62,285,286],{"class":93},"DLS",[62,288,83],{"class":89},[62,290,99],{"class":68},[62,292,294,296,299,301,303,305,308],{"class":64,"line":293},11,[62,295,213],{"class":75},[62,297,298],{"class":156},"province",[62,300,83],{"class":75},[62,302,86],{"class":68},[62,304,90],{"class":89},[62,306,307],{"class":93},"Alberta",[62,309,310],{"class":89},"\"\n",[62,312,314],{"class":64,"line":313},12,[62,315,316],{"class":68},"    }\n",[62,318,320],{"class":64,"line":319},13,[62,321,322],{"class":68},"  }]\n",[62,324,326],{"class":64,"line":325},14,[62,327,328],{"class":68},"}\n",[10,330,331],{},"You get the parcel boundary as a polygon (useful for drawing on a map), plus metadata like survey system, province, and unit type. Response times are sub-200ms.",[10,333,334],{},[335,336],"img",{"alt":337,"src":338},"Township Canada API portal","\u002Fimages\u002Fguides\u002Fapi-portal.webp",[25,340,342],{"id":341},"step-1-get-your-api-key","Step 1: Get Your API Key",[10,344,345,346,350,351,355],{},"Sign up at ",[33,347,349],{"href":348},"\u002F","townshipcanada.com",", then generate an API key from your ",[33,352,354],{"href":353},"\u002Fguides\u002Fapi-key-management","account settings",". You can create separate keys for development, staging, and production — there's no limit on the number of keys per account.",[10,357,358],{},"Authentication is a single header:",[42,360,363],{"className":361,"code":362,"language":47},[45],"X-API-Key: your-api-key\n",[14,364,362],{"__ignoreMap":50},[10,366,31,367,371],{},[33,368,370],{"href":369},"\u002Fpricing","Search Build plan"," starts at $20\u002Fmonth and includes 1,000 requests. For teams running 500+ conversions per month, that's a fraction of what alternatives charge — SCADALink's equivalent access starts at $325\u002Fmonth.",[25,373,375],{"id":374},"step-2-make-your-first-conversion","Step 2: Make Your First Conversion",[10,377,378],{},"Here's a minimal example in JavaScript:",[42,380,384],{"className":381,"code":382,"language":383,"meta":50,"style":50},"language-javascript shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","const response = await fetch(\"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=NW-25-024-01W5\", {\n  headers: { \"X-API-Key\": process.env.TC_API_KEY }\n});\n\nconst data = await response.json();\nconst feature = data.features[0];\nconst [lng, lat] = feature.geometry.coordinates[0][0];\n\nconsole.log(`Location: ${feature.properties.legal_location}`);\nconsole.log(`Coordinates: ${lat}, ${lng}`);\nconsole.log(`Province: ${feature.properties.province}`);\n","javascript",[14,385,386,422,459,470,476,498,525,567,571,613,650],{"__ignoreMap":50},[62,387,388,392,396,399,403,407,411,413,416,418,420],{"class":64,"line":65},[62,389,391],{"class":390},"s5Kfy","const",[62,393,395],{"class":394},"sSC40"," response",[62,397,398],{"class":68}," =",[62,400,402],{"class":401},"siDh9"," await",[62,404,406],{"class":405},"sljsM"," fetch",[62,408,410],{"class":409},"snCua","(",[62,412,83],{"class":89},[62,414,415],{"class":93},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=NW-25-024-01W5",[62,417,83],{"class":89},[62,419,170],{"class":68},[62,421,207],{"class":68},[62,423,424,428,430,432,434,438,440,442,445,448,451,453,456],{"class":64,"line":72},[62,425,427],{"class":426},"suXOh","  headers",[62,429,86],{"class":68},[62,431,151],{"class":68},[62,433,90],{"class":89},[62,435,437],{"class":436},"sQtxO","X-API-Key",[62,439,83],{"class":89},[62,441,86],{"class":68},[62,443,444],{"class":394}," process",[62,446,447],{"class":68},".",[62,449,450],{"class":394},"env",[62,452,447],{"class":68},[62,454,455],{"class":394},"TC_API_KEY",[62,457,458],{"class":68}," }\n",[62,460,461,464,467],{"class":64,"line":102},[62,462,463],{"class":68},"}",[62,465,466],{"class":409},")",[62,468,469],{"class":68},";\n",[62,471,472],{"class":64,"line":117},[62,473,475],{"emptyLinePlaceholder":474},true,"\n",[62,477,478,480,483,485,487,489,491,493,496],{"class":64,"line":139},[62,479,391],{"class":390},[62,481,482],{"class":394}," data",[62,484,398],{"class":68},[62,486,402],{"class":401},[62,488,395],{"class":394},[62,490,447],{"class":68},[62,492,58],{"class":405},[62,494,495],{"class":409},"()",[62,497,469],{"class":68},[62,499,500,502,505,507,509,511,513,516,520,523],{"class":64,"line":195},[62,501,391],{"class":390},[62,503,504],{"class":394}," feature",[62,506,398],{"class":68},[62,508,482],{"class":394},[62,510,447],{"class":68},[62,512,107],{"class":394},[62,514,515],{"class":409},"[",[62,517,519],{"class":518},"s7CZa","0",[62,521,522],{"class":409},"]",[62,524,469],{"class":68},[62,526,527,529,532,535,537,540,542,544,546,548,550,552,554,556,558,561,563,565],{"class":64,"line":210},[62,528,391],{"class":390},[62,530,531],{"class":68}," [",[62,533,534],{"class":394},"lng",[62,536,170],{"class":68},[62,538,539],{"class":394}," lat",[62,541,522],{"class":68},[62,543,398],{"class":68},[62,545,504],{"class":394},[62,547,447],{"class":68},[62,549,144],{"class":394},[62,551,447],{"class":68},[62,553,175],{"class":394},[62,555,515],{"class":409},[62,557,519],{"class":518},[62,559,560],{"class":409},"][",[62,562,519],{"class":518},[62,564,522],{"class":409},[62,566,469],{"class":68},[62,568,569],{"class":64,"line":231},[62,570,475],{"emptyLinePlaceholder":474},[62,572,573,576,578,581,583,586,589,593,597,599,601,603,605,607,609,611],{"class":64,"line":251},[62,574,575],{"class":394},"console",[62,577,447],{"class":68},[62,579,580],{"class":405},"log",[62,582,410],{"class":409},[62,584,585],{"class":89},"`",[62,587,588],{"class":93},"Location: ",[62,590,592],{"class":591},"s8XtY","${",[62,594,596],{"class":595},"su_V2","feature",[62,598,447],{"class":68},[62,600,200],{"class":595},[62,602,447],{"class":68},[62,604,236],{"class":595},[62,606,463],{"class":591},[62,608,585],{"class":89},[62,610,466],{"class":409},[62,612,469],{"class":68},[62,614,615,617,619,621,623,625,628,630,633,635,638,640,642,644,646,648],{"class":64,"line":272},[62,616,575],{"class":394},[62,618,447],{"class":68},[62,620,580],{"class":405},[62,622,410],{"class":409},[62,624,585],{"class":89},[62,626,627],{"class":93},"Coordinates: ",[62,629,592],{"class":591},[62,631,632],{"class":595},"lat",[62,634,463],{"class":591},[62,636,637],{"class":93},", ",[62,639,592],{"class":591},[62,641,534],{"class":595},[62,643,463],{"class":591},[62,645,585],{"class":89},[62,647,466],{"class":409},[62,649,469],{"class":68},[62,651,652,654,656,658,660,662,665,667,669,671,673,675,677,679,681,683],{"class":64,"line":293},[62,653,575],{"class":394},[62,655,447],{"class":68},[62,657,580],{"class":405},[62,659,410],{"class":409},[62,661,585],{"class":89},[62,663,664],{"class":93},"Province: ",[62,666,592],{"class":591},[62,668,596],{"class":595},[62,670,447],{"class":68},[62,672,200],{"class":595},[62,674,447],{"class":68},[62,676,298],{"class":595},[62,678,463],{"class":591},[62,680,585],{"class":89},[62,682,466],{"class":409},[62,684,469],{"class":68},[686,687,689],"h3",{"id":688},"sdk-options","SDK Options",[10,691,692],{},"If you'd rather skip raw HTTP calls, Township Canada has official SDKs for TypeScript and Python with the same method surface:",[10,694,695,699,700],{},[696,697,698],"strong",{},"TypeScript \u002F Node.js"," — ",[14,701,702],{},"npm install townshipcanada",[42,704,708],{"className":705,"code":706,"language":707,"meta":50,"style":50},"language-typescript shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","import { TownshipClient } from \"townshipcanada\";\n\nconst client = new TownshipClient({ apiKey: process.env.TC_API_KEY });\nconst result = await client.search(\"NW-25-024-01W5\");\nconsole.log(result.latitude, result.longitude, result.province);\n","typescript",[14,709,710,735,739,780,811],{"__ignoreMap":50},[62,711,712,715,717,720,723,726,728,731,733],{"class":64,"line":65},[62,713,714],{"class":401},"import",[62,716,151],{"class":68},[62,718,719],{"class":394}," TownshipClient",[62,721,722],{"class":68}," }",[62,724,725],{"class":401}," from",[62,727,90],{"class":89},[62,729,730],{"class":93},"townshipcanada",[62,732,83],{"class":89},[62,734,469],{"class":68},[62,736,737],{"class":64,"line":72},[62,738,475],{"emptyLinePlaceholder":474},[62,740,741,743,746,748,752,754,756,759,762,764,766,768,770,772,774,776,778],{"class":64,"line":102},[62,742,391],{"class":390},[62,744,745],{"class":394}," client",[62,747,398],{"class":68},[62,749,751],{"class":750},"sVsLi"," new",[62,753,719],{"class":405},[62,755,410],{"class":409},[62,757,758],{"class":68},"{",[62,760,761],{"class":426}," apiKey",[62,763,86],{"class":68},[62,765,444],{"class":394},[62,767,447],{"class":68},[62,769,450],{"class":394},[62,771,447],{"class":68},[62,773,455],{"class":394},[62,775,722],{"class":68},[62,777,466],{"class":409},[62,779,469],{"class":68},[62,781,782,784,787,789,791,793,795,798,800,802,805,807,809],{"class":64,"line":117},[62,783,391],{"class":390},[62,785,786],{"class":394}," result",[62,788,398],{"class":68},[62,790,402],{"class":401},[62,792,745],{"class":394},[62,794,447],{"class":68},[62,796,797],{"class":405},"search",[62,799,410],{"class":409},[62,801,83],{"class":89},[62,803,804],{"class":93},"NW-25-024-01W5",[62,806,83],{"class":89},[62,808,466],{"class":409},[62,810,469],{"class":68},[62,812,813,815,817,819,821,824,826,829,831,833,835,838,840,842,844,846,848],{"class":64,"line":139},[62,814,575],{"class":394},[62,816,447],{"class":68},[62,818,580],{"class":405},[62,820,410],{"class":409},[62,822,823],{"class":394},"result",[62,825,447],{"class":68},[62,827,828],{"class":394},"latitude",[62,830,170],{"class":68},[62,832,786],{"class":394},[62,834,447],{"class":68},[62,836,837],{"class":394},"longitude",[62,839,170],{"class":68},[62,841,786],{"class":394},[62,843,447],{"class":68},[62,845,298],{"class":394},[62,847,466],{"class":409},[62,849,469],{"class":68},[10,851,852,699,855],{},[696,853,854],{},"Python",[14,856,857],{},"pip install townshipcanada",[42,859,863],{"className":860,"code":861,"language":862,"meta":50,"style":50},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","from townshipcanada import TownshipClient\n\nclient = TownshipClient(api_key=os.environ[\"TC_API_KEY\"])\nresult = client.search(\"NW-25-024-01W5\")\nprint(result.latitude, result.longitude, result.province)\n","python",[14,864,865,879,883,922,946],{"__ignoreMap":50},[62,866,867,870,874,876],{"class":64,"line":65},[62,868,869],{"class":401},"from",[62,871,873],{"class":872},"sftqT"," townshipcanada ",[62,875,714],{"class":401},[62,877,878],{"class":872}," TownshipClient\n",[62,880,881],{"class":64,"line":72},[62,882,475],{"emptyLinePlaceholder":474},[62,884,885,888,891,894,896,900,902,905,907,911,913,915,917,919],{"class":64,"line":102},[62,886,887],{"class":872},"client ",[62,889,890],{"class":68},"=",[62,892,719],{"class":893},"siWMO",[62,895,410],{"class":68},[62,897,899],{"class":898},"sqOPj","api_key",[62,901,890],{"class":68},[62,903,904],{"class":893},"os",[62,906,447],{"class":68},[62,908,910],{"class":909},"sBPpx","environ",[62,912,515],{"class":68},[62,914,83],{"class":89},[62,916,455],{"class":93},[62,918,83],{"class":89},[62,920,921],{"class":68},"])\n",[62,923,924,927,929,931,933,935,937,939,941,943],{"class":64,"line":117},[62,925,926],{"class":872},"result ",[62,928,890],{"class":68},[62,930,745],{"class":872},[62,932,447],{"class":68},[62,934,797],{"class":893},[62,936,410],{"class":68},[62,938,83],{"class":89},[62,940,804],{"class":93},[62,942,83],{"class":89},[62,944,945],{"class":68},")\n",[62,947,948,952,954,956,958,960,962,964,966,968,970,972,974,976],{"class":64,"line":139},[62,949,951],{"class":950},"sJdAF","print",[62,953,410],{"class":68},[62,955,823],{"class":893},[62,957,447],{"class":68},[62,959,828],{"class":909},[62,961,170],{"class":68},[62,963,786],{"class":893},[62,965,447],{"class":68},[62,967,837],{"class":909},[62,969,170],{"class":68},[62,971,786],{"class":893},[62,973,447],{"class":68},[62,975,298],{"class":909},[62,977,945],{"class":68},[10,979,980],{},"Both SDKs wrap every endpoint with typed methods — no manual fetch calls or GeoJSON parsing required.",[25,982,984],{"id":983},"step-3-add-autocomplete-for-user-input","Step 3: Add Autocomplete for User Input",[10,986,987,988,992],{},"If your application has a search field where users type legal land descriptions, the ",[33,989,991],{"href":990},"\u002Fguides\u002Fautocomplete-api-guide","Autocomplete API"," returns suggestions as they type. This catches formatting errors before they become bad lookups:",[42,994,997],{"className":995,"code":996,"language":47},[45],"GET https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fautocomplete\u002Flegal-location?location=NW-25-024\n",[14,998,996],{"__ignoreMap":50},[10,1000,1001],{},"The response includes matching descriptions ranked by relevance, so users pick from valid options instead of guessing at format.",[25,1003,1005],{"id":1004},"step-4-handle-bulk-data-with-the-batch-endpoint","Step 4: Handle Bulk Data with the Batch Endpoint",[10,1007,1008],{},"Most real-world integrations need to convert more than one location at a time. A pipeline company importing 230 well crossings, a crop insurance provider processing 2,000 policy applications, an O&G data team enriching a production database — these are batch jobs.",[10,1010,31,1011,1015,1016,1019],{},[33,1012,1014],{"href":1013},"\u002Fguides\u002Fbatch-api-guide","Batch API"," accepts up to 100 legal land descriptions per request. The npm SDK's ",[14,1017,1018],{},"batchSearch()"," method automatically chunks larger datasets:",[42,1021,1023],{"className":705,"code":1022,"language":707,"meta":50,"style":50},"const locations = [\n  \"LSD 06-32-048-07W5\",\n  \"NE-14-032-21W4\",\n  \"NW-25-024-01W5\"\n  \u002F\u002F ... hundreds more\n];\n\nconst batch = await client.batchSearch(locations);\nconsole.log(`Converted: ${batch.success} of ${batch.total}`);\n",[14,1024,1025,1037,1048,1059,1067,1073,1079,1083,1110],{"__ignoreMap":50},[62,1026,1027,1029,1032,1034],{"class":64,"line":65},[62,1028,391],{"class":390},[62,1030,1031],{"class":394}," locations",[62,1033,398],{"class":68},[62,1035,1036],{"class":409}," [\n",[62,1038,1039,1041,1044,1046],{"class":64,"line":72},[62,1040,76],{"class":89},[62,1042,1043],{"class":93},"LSD 06-32-048-07W5",[62,1045,83],{"class":89},[62,1047,99],{"class":68},[62,1049,1050,1052,1055,1057],{"class":64,"line":102},[62,1051,76],{"class":89},[62,1053,1054],{"class":93},"NE-14-032-21W4",[62,1056,83],{"class":89},[62,1058,99],{"class":68},[62,1060,1061,1063,1065],{"class":64,"line":117},[62,1062,76],{"class":89},[62,1064,804],{"class":93},[62,1066,310],{"class":89},[62,1068,1069],{"class":64,"line":139},[62,1070,1072],{"class":1071},"s9Tkl","  \u002F\u002F ... hundreds more\n",[62,1074,1075,1077],{"class":64,"line":195},[62,1076,522],{"class":409},[62,1078,469],{"class":68},[62,1080,1081],{"class":64,"line":210},[62,1082,475],{"emptyLinePlaceholder":474},[62,1084,1085,1087,1090,1092,1094,1096,1098,1101,1103,1106,1108],{"class":64,"line":231},[62,1086,391],{"class":390},[62,1088,1089],{"class":394}," batch",[62,1091,398],{"class":68},[62,1093,402],{"class":401},[62,1095,745],{"class":394},[62,1097,447],{"class":68},[62,1099,1100],{"class":405},"batchSearch",[62,1102,410],{"class":409},[62,1104,1105],{"class":394},"locations",[62,1107,466],{"class":409},[62,1109,469],{"class":68},[62,1111,1112,1114,1116,1118,1120,1122,1125,1127,1130,1132,1135,1137,1140,1142,1144,1146,1149,1151,1153,1155],{"class":64,"line":251},[62,1113,575],{"class":394},[62,1115,447],{"class":68},[62,1117,580],{"class":405},[62,1119,410],{"class":409},[62,1121,585],{"class":89},[62,1123,1124],{"class":93},"Converted: ",[62,1126,592],{"class":591},[62,1128,1129],{"class":595},"batch",[62,1131,447],{"class":68},[62,1133,1134],{"class":595},"success",[62,1136,463],{"class":591},[62,1138,1139],{"class":93}," of ",[62,1141,592],{"class":591},[62,1143,1129],{"class":595},[62,1145,447],{"class":68},[62,1147,1148],{"class":595},"total",[62,1150,463],{"class":591},[62,1152,585],{"class":89},[62,1154,466],{"class":409},[62,1156,469],{"class":68},[10,1158,1159,1160,1164,1165,1168],{},"For warehouse-scale conversion, Township Canada also runs as a ",[33,1161,1163],{"href":1162},"\u002Fblog\u002Fsnowflake-dls-enrichment","Snowflake External Function"," — call ",[14,1166,1167],{},"TOWNSHIP_CONVERT(lld_column)"," directly in SQL without exporting data.",[25,1170,1172],{"id":1171},"common-use-cases","Common Use Cases",[10,1174,1175],{},"A legal land description API in Canada fits wherever Canadian land locations show up in software:",[1177,1178,1179,1191,1202,1208,1219],"ul",{},[1180,1181,1182,1185,1186,1190],"li",{},[696,1183,1184],{},"Well site lookup for O&G applications"," — Field dispatch tools convert UWI locations to GPS for crew navigation. A ",[33,1187,1189],{"href":1188},"\u002Fblog\u002Foil-gas-legal-land-descriptions","detailed breakdown of energy-industry workflows"," covers the specifics.",[1180,1192,1193,1196,1197,1201],{},[696,1194,1195],{},"Rural property platforms"," — Listings in ",[33,1198,1200],{"href":1199},"\u002Flearn\u002Fsystems\u002Fdls","DLS format"," get map pins and quarter-section boundaries for buyer-facing search.",[1180,1203,1204,1207],{},[696,1205,1206],{},"Field crew dispatch tools"," — Turn legal descriptions from work orders into GPS coordinates that mobile devices can navigate to.",[1180,1209,1210,1213,1214,1218],{},[696,1211,1212],{},"Crop insurance systems"," — Batch-convert ",[33,1215,1217],{"href":1216},"\u002Flearn\u002Fhow-to\u002Fquarter-section-finder","quarter sections"," from policy applications and display them on maps for adjuster review.",[1180,1220,1221,1224],{},[696,1222,1223],{},"Data warehouse enrichment"," — Add GPS columns to tables of legal land descriptions without moving data out of Snowflake or Databricks.",[25,1226,1228],{"id":1227},"pricing-that-scales-with-your-usage","Pricing That Scales with Your Usage",[10,1230,1231],{},"The legal land description API in Canada is priced by request volume, not per-seat:",[1233,1234,1235,1251],"table",{},[1236,1237,1238],"thead",{},[1239,1240,1241,1245,1248],"tr",{},[1242,1243,1244],"th",{},"Plan",[1242,1246,1247],{},"Monthly Cost",[1242,1249,1250],{},"Requests Included",[1252,1253,1254,1266,1277],"tbody",{},[1239,1255,1256,1260,1263],{},[1257,1258,1259],"td",{},"Build",[1257,1261,1262],{},"$20\u002Fmo",[1257,1264,1265],{},"1,000",[1239,1267,1268,1271,1274],{},[1257,1269,1270],{},"Scale",[1257,1272,1273],{},"$100\u002Fmo",[1257,1275,1276],{},"10,000",[1239,1278,1279,1282,1285],{},[1257,1280,1281],{},"Enterprise",[1257,1283,1284],{},"$500\u002Fmo",[1257,1286,1287],{},"100,000",[10,1289,1290,1291,447],{},"Autocomplete, Batch, and Maps APIs are available as separate subscriptions. Full pricing details are on the ",[33,1292,1294],{"href":1293},"\u002Fapi","API page",[25,1296,1298],{"id":1297},"start-integrating","Start Integrating",[10,1300,1301,1302,1306,1307,637,1311,637,1315,1319,1320,447],{},"The setup takes less than five minutes: create an account, generate a key, and make your first request. The ",[33,1303,1305],{"href":1304},"\u002Fguides\u002Fapi-integration","API integration guide"," covers authentication, error handling, and response formats in detail. If you're building with a mapping library, Township Canada has step-by-step guides for ",[33,1308,1310],{"href":1309},"\u002Fguides\u002Fgoogle-maps-integration","Google Maps",[33,1312,1314],{"href":1313},"\u002Fguides\u002Fmapbox-integration","Mapbox GL JS",[33,1316,1318],{"href":1317},"\u002Fguides\u002Fleaflet-integration","Leaflet",", and ",[33,1321,1323],{"href":1322},"\u002Fguides\u002Fopenlayers-integration","OpenLayers",[10,1325,1326],{},"Your application handles the user experience. The API handles the conversion layer. One endpoint, any Canadian survey system, sub-200ms response.",[1328,1329,1330],"style",{},"html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s4Jsk, html code.shiki .s4Jsk{--shiki-light:#39ADB5;--shiki-default:#99841877;--shiki-dark:#B8A96577}html pre.shiki code .sLorS, html code.shiki .sLorS{--shiki-light:#9C3EDA;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .skNjk, html code.shiki .skNjk{--shiki-light:#F76D47;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .srjyR, html code.shiki .srjyR{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sQtxO, html code.shiki .sQtxO{--shiki-light:#E53935;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .su_V2, html code.shiki .su_V2{--shiki-light:#90A4AE;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}",{"title":50,"searchDepth":72,"depth":72,"links":1332},[1333,1334,1335,1338,1339,1340,1341,1342],{"id":27,"depth":72,"text":28},{"id":341,"depth":72,"text":342},{"id":374,"depth":72,"text":375,"children":1336},[1337],{"id":688,"depth":102,"text":689},{"id":983,"depth":72,"text":984},{"id":1004,"depth":72,"text":1005},{"id":1171,"depth":72,"text":1172},{"id":1227,"depth":72,"text":1228},{"id":1297,"depth":72,"text":1298},"https:\u002F\u002Fb9bukyyl5yuyveqq.public.blob.vercel-storage.com\u002Fimages\u002Fblog\u002F2026-03\u002F78e9e64b-533f-429a-a69b-7a061dc4b81f.jpeg","2026-04-28","Use the legal land description API in Canada to add DLS, LSD, and NTS conversion to your app. Code examples, SDKs, and pricing.","md",{"category":1348,"author":1349},"guides","Township Canada","\u002Fblog\u002Fintegrate-legal-land-description-api-canada",{"title":5,"description":1345},"blog\u002Fintegrate-legal-land-description-api-canada",[1354,1355,1356,1357],"Developer","API","Integration","Tutorial","SaJOx9FtV0bE2xYCUsJLuMBS8ClFP8zWnjWACnm7VUM"]