Custom maps in CRM Analytics dashboards do more than look impressive. They give users a spatially intuitive way to slice and dice data — filtering by region, territory, floor plan, or any geography that actually reflects how your business is organised, rather than a generic world map.

The challenge has always been the format. CRM Analytics expects geoJSON. Not every image exists as an SVG, and not every geography has a pre-built geoJSON available in the community. This workflow solves that: starting from any JPG, PNG, or JPEG image, you can produce a fully interactive custom map file in four steps.

Credit to Michael Lowe for his original method of creating custom maps from SVG files, and to Rikke Hovgaard for her contributions of pre-built geoJSON maps to the Salesforce community. This workflow extends the approach to handle images that are not available in SVG format.
What you need
Four free tools — plus CRM Analytics
1
Your image in JPG, JPEG, or PNG format. Any image that has clear, distinct regions you want to make clickable. Keep image copyright in mind — use images you own or that are licensed for this use.
2
Inkscape — free, open-source vector graphics editor. Used to trace region outlines on top of your image and export them as a DXF file.
3
A DXF-to-geoJSON converter — two reliable free options: ogre.adc4gis.com or 2geojson.com. Upload your DXF, download geoJSON.
4
Mapshaper.org — browser-based tool for editing, simplifying, and adding attribute data to geoJSON files. The console commands here are the key to making your map interactive in CRM Analytics.

Step 1
Create a DXF layer in Inkscape by tracing your image regions

Open your image in Inkscape. Your goal is to draw a shape outline over every region of the image that you want to be a separately selectable area on the map.

The most precise approach is the Draw Freehand Lines tool, which lets you trace any irregular shape. For rectangular regions — or to keep the demo simple — the Create Rectangles and Squares tool works well too.

As you draw each shape, fill it with a solid colour. The colour itself does not matter for the geoJSON conversion — what matters is that every region is a fully closed, filled shape with no gaps at the boundaries.

When all regions are outlined, save the file in DXF format (File → Save As → select Desktop Cutting Plotter DXF as the format).

Drawing tip: Each closed shape in Inkscape will become one polygon in your geoJSON — and one selectable region on your CRM Analytics map. Plan your shapes before you start drawing. Overlapping or unclosed shapes will cause problems in the conversion step.
Video walkthrough — Step 1: Opening the source image in Inkscape, drawing region outlines using the rectangle and freehand tools, filling shapes with solid colours, and saving the file in DXF format. Originally published at einsteinplusanalytics.com.
Step 2
Convert the DXF file to geoJSON format

Upload your .dxf file to an online DXF-to-geoJSON converter. Two reliable free options:

ogre.adc4gis.com — robust and well-maintained. Tick the Force Download checkbox before converting.
2geojson.com — simpler interface, useful if ogre is experiencing issues.

Upload your DXF, run the conversion, and download the resulting .geojson file. Open it in a text editor to confirm it contains Polygon or MultiPolygon features — one per shape you drew in Step 1.

If the download fails: Switch to the alternative converter. Both tools work identically for this purpose. If you see GeometryCollection types instead of Polygon types in the output, the DXF may contain open paths — go back to Inkscape and ensure every shape is fully closed.
Video walkthrough — Step 2: Uploading the DXF file to the online converter, enabling Force Download, and verifying the resulting geoJSON file structure. Originally published at einsteinplusanalytics.com.
Step 3
Add region names and attributes in Mapshaper

Drag and drop your .geojson file onto the Mapshaper canvas. You will see your shapes rendered as a map. Now open the console (the “Console” button in the toolbar) and run the following three commands in order:

Mapshaper console commands — run in this exact order
// 1. Convert all features to polygon type
polygons

// 2. Initialise the name attribute on each feature
each name = name

// 3. Dissolve shapes by their name attribute
//    (enter a unique name for every shape via the data panel first)
dissolve field=name

After running each name = name, click the arrow button to open the sub-menu and select Data. This opens the attribute table where you can type a unique name for each shape. Every shape must be named — any shape left with a null name will be dissolved and lost in the next command.

Once all shapes are named, run the dissolve command. Then export the file as geoJSON using Export → GeoJSON.

Why the dissolve step matters: The name you assign each shape in Mapshaper becomes the attribute that CRM Analytics uses to match your data to the map regions. If your dataset has a field called Region with values like “North”, “South”, “East” — your Mapshaper shape names must match those values exactly for the map to bind to your data.
Video walkthrough — Step 3: Uploading the geoJSON to Mapshaper, running the three console commands, naming each shape in the data panel, running the dissolve, and exporting the final geoJSON file. Originally published at einsteinplusanalytics.com.
Step 4
Build the CRM Analytics dashboard with the image background and geoJSON overlay

Create a new blank dashboard in CRM Analytics. Use a maximum or high-resolution layout (40+ columns) — this gives you the fine-grained positioning control needed to align the map overlay precisely over the background image.

Add a Container widget to the canvas. In the widget properties, set your original JPG/JPEG/PNG image as the background image of the container. This is the visual base layer.

Inside the container, create a lens from your dataset and change the widget type to Map. In the map widget properties, click the + button to upload your new geoJSON file as a custom map.

Finally, set the map widget background and border to transparent so the image shows through beneath the interactive map layer. Adjust the widget size and position until the map regions align precisely with the image below.

Alignment tip: Use the dashboard grid snapping and the exact pixel positioning controls to align the map overlay with your background image. If the shapes feel slightly offset, try adjusting the container padding or the widget margins in the properties panel.
Video walkthrough — Step 4: Setting up the high-resolution dashboard layout, adding the container with background image, creating the map lens, uploading the custom geoJSON, making the map layer transparent, and verifying the interactive regions work correctly. Originally published at einsteinplusanalytics.com.

Any image. Any region. A fully interactive custom map in CRM Analytics — without needing a pre-built SVG or geoJSON file.


About the Author
Rashid Haq
Enterprise Analytics Architect · CRM Analytics Specialist

22+ years delivering enterprise analytics. CRM Analytics practitioner, Salesforce Analytics Champion 2020, Tableau CRM Ambassador 2021–23. Originally published at einsteinplusanalytics.com.

Back to all articles Resource Library