GitHub home of the CSV Geocoder custom widget for ArcGIS Experience Builder.
The widget lets users upload a CSV or Excel file of addresses, map columns to address fields, geocode against a configurable Esri Locator service, display matched points on a connected Map widget, and export the results as GeoJSON, KML, or Shapefile.
For full feature, install, and configuration documentation, see csv-geocoder/README.md.
Grab the latest release from the Releases page, or clone this repository and use the csv-geocoder/ subfolder.
The same .zip is also attached to the Esri Community post linked below.
The zip is the widget only. The Visual Studio type shims in the repo (csv-geocoder/src/exb-editor-shims.d.ts) are left out on purpose: their ambient declare module blocks are not file-scoped and would rewrite the react, jimu and esri types for every other widget in your your-extensions folder.
If you clone the repository instead of using the zip, delete csv-geocoder/src/exb-editor-shims.d.ts before building; nothing else depends on it.
csv-geocoder-widget/
├── README.md <- this file (GitHub landing page)
├── LICENSE <- Apache-2.0
├── .gitignore
├── publish.ps1 <- automation: sync from EB, push, cut release
└── csv-geocoder/ <- the widget; drop this folder into your-extensions/widgets
├── package.json
├── package-lock.json <- generated in the real EB environment
├── manifest.json
├── config.json
├── icon.svg
├── README.md <- widget-level install + usage docs
├── LICENSE
├── .gitignore
├── .npmignore
└── src/ ...
- Place the
csv-geocoder/folder directly inside your EB install atclient/your-extensions/widgets/csv-geocoder/somanifest.jsonsits directly inside that folder, not nested. - From the
clientfolder, runnpm install. EB picks up the widget's dependencies from itspackage.jsonautomatically. - Run
npm start, then add the widget to a page that has a Map widget.
Full steps are in csv-geocoder/README.md, including settings, usage, and troubleshooting.
This repo follows the City of Grand Junction widget-publishing convention (see the GIS team handoff playbook). The publish.ps1 script automates the workflow:
-
Edit the three variables at the top of
publish.ps1:$WidgetName- the widget folder name (defaultcsv-geocoder)$RepoName- the GitHub repo name (defaultcsv-geocoder-widget)$EBClient- the local path to the EBclientfolder
-
From the repo root, run:
powershell -ExecutionPolicy Bypass -File .\publish.ps1The script pulls the widget folder from EB, strips
node_modulesand.vs, commits, and pushes. On the first run it initializes git and creates the GitHub repo via theghCLI. -
To cut a downloadable release, add the
-Releaseflag with a version tag:powershell -ExecutionPolicy Bypass -File .\publish.ps1 -Release v1.0.0This creates the git tag, builds a zip of the
csv-geocoder/subfolder, and uploads it as the release asset.
- Bug fix:
v1.0.1,v1.0.2 - New feature:
v1.1.0,v1.2.0 - Major change:
v2.0.0
Discussion, screenshots, and downloadable zip attachments live on the Esri Community thread:
https://community.esri.com/t5/experience-builder-custom-widgets/csv-geocoder-widget/ba-p/1708724
Apache-2.0. Copyright 2026 City of Grand Junction, CO. See LICENSE.