{"id":15420019,"url":"https://github.com/imicknl/azure-functions-libpostal","last_synced_at":"2026-02-18T13:01:26.387Z","repository":{"id":37233651,"uuid":"498779793","full_name":"iMicknl/azure-functions-libpostal","owner":"iMicknl","description":"Azure Function binding to libpostal for fast international address parsing/normalization.","archived":false,"fork":false,"pushed_at":"2025-10-07T08:04:29.000Z","size":43,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-13T19:42:33.973Z","etag":null,"topics":["address-parser","azure-functions","libpostal"],"latest_commit_sha":null,"homepage":"","language":"Bicep","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iMicknl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-01T14:53:15.000Z","updated_at":"2025-08-24T17:45:55.000Z","dependencies_parsed_at":"2024-02-02T15:31:20.317Z","dependency_job_id":"21603463-03d9-4488-89b4-ca69a430c8a0","html_url":"https://github.com/iMicknl/azure-functions-libpostal","commit_stats":{"total_commits":18,"total_committers":2,"mean_commits":9.0,"dds":"0.11111111111111116","last_synced_commit":"adaa1bb9361779c2fc6b0a8db3f31ce06f35d341"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/iMicknl/azure-functions-libpostal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iMicknl%2Fazure-functions-libpostal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iMicknl%2Fazure-functions-libpostal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iMicknl%2Fazure-functions-libpostal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iMicknl%2Fazure-functions-libpostal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iMicknl","download_url":"https://codeload.github.com/iMicknl/azure-functions-libpostal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iMicknl%2Fazure-functions-libpostal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29580633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["address-parser","azure-functions","libpostal"],"created_at":"2024-10-01T17:27:51.958Z","updated_at":"2026-02-18T13:01:26.370Z","avatar_url":"https://github.com/iMicknl.png","language":"Bicep","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Deploy to Azure](https://aka.ms/deploytoazurebutton)][deployment-url]\n[![Deploy to Azure Gov](https://aka.ms/deploytoazuregovbutton)][deployment-url-gov]\n\n[deployment-url]: https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FiMicknl%2Fazure-functions-libpostal%2Fmain%2Fdeploy%2Faz_function_deployment.json\n\n[deployment-url-gov]: https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FiMicknl%2Fazure-functions-libpostal%2Fmain%2Fdeploy%2Faz_function_deployment.json\n\n\n# azure-functions-libpostal\nAn Azure Function project which utilizes [libpostal](https://github.com/openvenues/libpostal), a C library for parsing and normalizing street addresses. This can be useful for matching address strings with a database, and it can be used with Azure Cognitive Search to split an address over multiple index fields.\n\nDue to C binding required for Libpostal, we need to [create an Azure Function on Linux using a custom container](https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image?tabs=in-process%2Cbash%2Cazure-cli\u0026pivots=programming-language-python). This will require a Premium plan or Dedicated (App Service) plan.\n\n## How to deploy\n\nYou can easily deploy this Azure Function in your own Azure environment, by clicking the Deploy to Azure button.\n\n[![Deploy to Azure](https://aka.ms/deploytoazurebutton)][deployment-url] [![Deploy to Azure Gov](https://aka.ms/deploytoazuregovbutton)][deployment-url-gov]\n\nThis will deploy an Azure Function app with a dedicated App Service plan (B3 sku) using the published [Docker container on GitHub Container Registry](https://github.com/iMicknl/azure-functions-libpostal/pkgs/container/azure-functions-libpostal). The project can easily be forked to make code changes and/or infrastructure changes.\n\n\n## Endpoints\n### /api/ParseAddress (GET/POST)\n**Input**: \n```json\n{\n\t\"address\": \"Evert van de Beekstraat 354, 1118 CZ Schiphol, Nederland\",\n}\n```\n\nor\n\n```https://[APP_NAME].azurewebsites.net/api/ParseAddress?address=Evert%20van%20de%20Beekstraat%20354,%201118%20CZ%20Schiphol,%20Nederland```\n\n\n**Output**:\n```json\n{\n\t\"road\": \"evert van de beekstraat\",\n\t\"house_number\": \"354\",\n\t\"postcode\": \"1118cz\",\n\t\"city\": \"schiphol\",\n\t\"country\": \"nederland\"\n}\n```\n\n### /api/ParseAddressCognitiveSearch (POST)\n\n**Input**:\n```json\n{\n    \"values\": [\n      {\n        \"recordId\": \"a1\",\n        \"data\":\n           {\n             \"address\": \n                \"Evert van de Beekstraat 354, 1118 CZ Schiphol, Nederland \"\n           }\n      },\n      {\n        \"recordId\": \"b5\",\n        \"data\":\n           {\n             \"address\": \n                \"One Microsoft Way, Redmond, WA 98052, United States\"\n           }\n      },\n      {\n        \"recordId\": \"c3\",\n        \"data\":\n           {\n             \"address\": null\n           }\n      }\n    ]\n}\n```\n\n**Output**:\n```json\n{\n    \"values\": [\n        {\n            \"recordId\": \"a1\",\n            \"data\": {\n                \"road\": \"evert van de beekstraat\",\n                \"house_number\": \"354\",\n                \"postcode\": \"1118cz\",\n                \"city\": \"schiphol\",\n                \"country\": \"nederland\"\n            }\n        },\n        {\n            \"recordId\": \"b5\",\n            \"data\": {\n                \"house\": \"one\",\n                \"road\": \"microsoft way\",\n                \"city\": \"redmond\",\n                \"state\": \"wa\",\n                \"postcode\": \"98052\",\n                \"country\": \"united states\"\n            }\n        },\n        {\n            \"recordId\": \"c3\",\n            \"errors\": [\n                {\n                    \"message\": \"Could not complete operation for record.\"\n                }\n            ]\n        }\n    ]\n}\n```\n\n\n## Use with Cognitive Search\n\n```json\n{\n    \"skills\": [\n      {\n        \"@odata.type\": \"#Microsoft.Skills.Custom.WebApiSkill\",\n        \"name\": \"ParseAddressSkill\",\n        \"description\": \"This skill calls an Azure Function binding to libpostal for fast international address parsing/normalization.\",\n        \"uri\": \"https://[YOUR-DEPLOYED-FUNCTION].azurewebsites.net/api/ParseAddressCognitiveSearch\",\n        \"context\": \"/document\",\n        \"inputs\": [\n          {\n            \"name\": \"address\",\n            \"source\": \"/document/address\"\n          }\n        ],\n        \"outputs\": [\n\t\t  {\n            \"name\": \"house\",\n            \"targetName\": \"house\"\n          },\n          {\n            \"name\": \"road\",\n            \"targetName\": \"road\"\n          },\n\t\t  {\n            \"name\": \"house_number\",\n            \"targetName\": \"house_number\"\n          },\n\t\t  {\n            \"name\": \"postcode\",\n            \"targetName\": \"postcode\"\n          },\n\t\t  {\n            \"name\": \"city\",\n            \"targetName\": \"city\"\n          },\n\t\t  {\n            \"name\": \"state\",\n            \"targetName\": \"state\"\n          },\n\t\t  {\n            \"name\": \"country\",\n            \"targetName\": \"country\"\n          }               \n        ]\n      }\n  ]\n}\n```\n\n## Contribute to this repository\n\n#### Project Structure\nThe main project folder (\u003cproject_root\u003e) can contain the following files:\n\n* **local.settings.json** - Used to store app settings and connection strings when running locally. This file doesn't get published to Azure. To learn more, see [local.settings.file](https://aka.ms/azure-functions/python/local-settings).\n* **requirements.txt** - Contains the list of Python packages the system installs when publishing to Azure.\n* **host.json** - Contains global configuration options that affect all functions in a function app. This file does get published to Azure. Not all options are supported when running locally. To learn more, see [host.json](https://aka.ms/azure-functions/python/host.json).\n* **.vscode/** - (Optional) Contains store VSCode configuration. To learn more, see [VSCode setting](https://aka.ms/azure-functions/python/vscode-getting-started).\n* **.venv/** - (Optional) Contains a Python virtual environment used by local development.\n* **Dockerfile** - (Optional) Used when publishing your project in a [custom container](https://aka.ms/azure-functions/python/custom-container).\n* **tests/** - (Optional) Contains the test cases of your function app. For more information, see [Unit Testing](https://aka.ms/azure-functions/python/unit-testing).\n* **.funcignore** - (Optional) Declares files that shouldn't get published to Azure. Usually, this file contains .vscode/ to ignore your editor setting, .venv/ to ignore local Python virtual environment, tests/ to ignore test cases, and local.settings.json to prevent local app settings being published.\n\nEach function has its own code file and binding configuration file ([**function.json**](https://aka.ms/azure-functions/python/function.json)).\n\n\n#### Developing your Python function using VS Code\n\nThis project includes a devcontainer that can be used on GitHub Codespaces or Visual Studio Code with Docker. During first build, it wil compile the Libpostal C module and download all training data. If you have not already, please checkout our [quickstart](https://aka.ms/azure-functions/python/quickstart) to get you started with Azure Functions developments in Python. \n\n#### Publishing your function app to Azure \n\nFor more information on deployment options for Azure Functions, please visit this [guide](https://docs.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-python#publish-the-project-to-azure).\n\n\n## License\n\nMIT \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimicknl%2Fazure-functions-libpostal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimicknl%2Fazure-functions-libpostal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimicknl%2Fazure-functions-libpostal/lists"}