Drupal is a registered trademark of Dries Buytaert
Release: Leaflet 10.4.11 Minor update available for module leaflet (10.4.11). Release: Session Inspector 1.0.8 Minor update available for module session_inspector (1.0.8). Release: Migrate QA 2.0.4 Minor update available for module migrate_qa (2.0.4). Release: CKEditor Description List 3.0.0 Major update available for module ckeditor_descriptionlist (3.0.0). Release: FlowDrop 2.4.0 Minor update available for module flowdrop (2.4.0). Release: JWT Token Refresh 1.0.4 Minor update available for module jwt_token_refresh (1.0.4). Release: ConReg 1.0.0-beta1 First beta version released for module conreg (1.0.0-beta1). Release: AI Image Studio 1.0.0-beta8 New beta version released for module ai_image_studio (1.0.0-beta8). Usage Milestone: Statistics Counter Module statistics_counter crossed 1,000 active installs. Module Revived: Decoupled Router 2.0.7 Module decoupled_router updated after 11 months of inactivity (2.0.7).

Provider Map

No security coverage
View on drupal.org

Provider Map creates interactive, searchable maps from a spreadsheet of organizations and the service areas they cover, like counties or districts. It allows users to filter providers directly on the map without relying on external services, ensuring data privacy and accessibility. The module includes a CSV import wizard and configurable filters and tooltips for a tailored user experience.

Provider Map takes a spreadsheet of organizations and turns it into a searchable, clickable map of the areas they serve. Those areas can be counties, parishes, boroughs, tribal nations, health districts, catchment areas, or anything else you can supply as GeoJSON.

If you run a second program, or cover a second state, you add a second map. You do not fork the module.

What you get

  • A map with no dependencies. The geometry is stored in Drupal and projected to SVG in the browser. There is no Leaflet, no Mapbox, no Google Maps, no tile server, no API key, and no request to any third party once the page has loaded. Nothing about your visitors leaves your site.
  • Every region is a real DOM node. Each area is a <path> with role="button", tabindex, aria-pressed and a label that reads "Sangamon, 3 providers". You can focus it, operate it from the keyboard, and a screen reader can address it. It is not a pixel on a canvas.
  • It works before JavaScript. The full unfiltered directory is rendered server side. Before a byte of JS runs, a visitor has every provider in a real table, the browser's own find works, and the page prints properly.
  • A CSV import that validates first. Upload the file, match the columns, then review exactly what will be created and updated, and which rows have an unknown region or a malformed coordinate, before anything is written. Re-importing updates records rather than duplicating them.
  • Filters you define. A workforce directory filters by services and supports. A childcare directory filters by ages served and program type. Facets are configuration, not code.
  • Tooltips and detail panels you control. You choose what a hover reveals, and which fields the detail dialog shows, per map, from the admin UI.

Who it is for

Public agencies, health departments, workforce boards, non-profits and universities that publish a "find a provider near you" directory, and need it to be accessible, printable, and free of third party embeds.

Try it in one step

Enable the provider_map_example submodule. It installs a working map with all 102 Illinois counties and a sample child care and early learning directory, so you can see a finished configuration before building your own. Uninstall it and it removes every trace.

Everything in it is invented. The organizations, the phone numbers and the example.org addresses do not correspond to real programs. It is there to demonstrate the module, not to publish a directory.

What it does not do

Being clear about this saves everyone an issue report.

  • No basemap. There are no streets, labels or satellite imagery. This draws your regions on a plain background. If you need a road map underneath, use Leaflet or Geofield Map.
  • No geocoding. Coordinates for provider pins are entered or imported, not looked up from an address. Pair it with Geocoder if you need that.
  • No routing or distance search. It answers the question "who serves this area" rather than "who is closest to this point".
  • It ships no geodata. You supply your own GeoJSON. Census cartographic boundary files and state open data portals both export it directly, and the importer will simplify a high detail file for you.

Requirements

Drupal 10.3 or 11. It uses core's File, Filter, Options and User modules only, with no contributed dependencies.

Accessibility

Filters come before the map in the document, because filters are what a visitor reaches for, and a map at the top buries the controls below the fold on a phone. Result counts announce through an aria-live region. Filter state lives in the URL, so a filtered view can be bookmarked, shared, or printed on a leaflet. On narrow screens the results table becomes cards, rather than hiding the columns people came for. Both prefers-reduced-motion and prefers-color-scheme are respected.

The detail panel is a real dialog. Focus moves into it, Tab is trapped inside it, Escape closes it, and focus returns to whatever opened it.

Similar modules

Reach for Leaflet or Geofield Map when you need a real basemap, markers on streets, or distance search. Reach for Views with an exposed filter when you need a filterable list and no map at all.

Provider Map sits in the gap between those two. It draws a choropleth of service areas rather than points on a street map, and the directory and the map filter each other.

Activity

Tracked releases
2
Tracked since
Aug 2026
Latest release
4 days ago
Releases (12 mo)
2 ▲ from 0
Maintenance
Active

Releases

Version Type Release date
1.0.x-dev Dev Aug 19, 2026
1.0.0-alpha1 Pre-release Aug 17, 2026