Documentation

The Mapji manual

A reference for everything in the product: the ten map types and what each one expects from your data, how data gets in and stays current, how a map is styled, and how it is published, embedded and moderated. Sections are linkable — click the beside a heading to copy its address.

How Mapji works

Mapji turns a dataset into an interactive map that lives at its own web address. There is no code to write and nothing to host: you pick a map type, bring your data in, adjust how it looks and behaves, and the map is already live.

Four ideas cover almost everything in the product, and the rest of this manual is organised around them.

ConceptWhat it means
A map is a siteEach map you create is a self-contained site with its own address, its own data, its own styling and its own settings. Maps never share data or configuration, so changing one cannot affect another. One account can hold as many as you like.
Map typeThe type decides how your data is drawn and what the editor offers you — clusters, a heat surface, shaded regions, a scrolling story, a submission form. It is chosen when you create the map and can be changed later in Settings.
Data sourceWhere the features come from: a file you upload, shapes you draw, a connected Google Sheet that keeps syncing, or submissions from visitors. A map holds one dataset — except Compare, which holds one per side.
The published mapEvery map is immediately live at yourmap.mapji.com, can take a custom domain, and has a separate embed URL for putting inside someone else's page.

Everything in the editor saves as you work. There is no publish step and no draft state: an edit is live once it is written, so preview the public map in another tab if you want to watch it change.

What Mapji does not do

Worth knowing before you plan a project around it, because each of these is a design decision rather than a gap waiting to be filled.

  • It does not geocode your data. Uploads and Google Sheets are plotted from latitude and longitude in decimal degrees. A column of street addresses will not be converted, so geocode your list elsewhere first. The one exception is the Draw map's route builder, where typing an address picks a single stop.
  • It never writes to your Google Sheet. The connection is read-only in the strict sense: Mapji asks Google only for read permission, so the spreadsheet stays the source of truth and cannot be reformatted or emptied by anything here.
  • It is not a GIS analysis tool. There is no buffering, intersection or spatial join. Isochrones and road routes are computed for you, but transformations of your own geometry belong upstream.

Quick start

From nothing to a published map is about five minutes, most of it spent choosing how the data should look.

  1. 1

    Sign in

    Use a GitHub, Google or Microsoft account. The dashboard lives at app.mapji.com.

  2. 2

    Create a map

    The create dialog asks for a map type first. Nine types are filled with your own data; Crowdsourced Map is listed separately because its data comes from visitors. Then name the map — the web address is slugified from the name as you type, and you can override it.

  3. 3

    Bring your data in

    Upload a file, connect a Google Sheet, or build the map by hand on the canvas. See Importing files for what each type expects.

  4. 4

    Configure the type

    The Settings tab in the editor sidebar holds the settings specific to your map type: the heat gradient, the cluster bands, the time column, the store fields.

  5. 5

    Style it and set the behaviour

    The buttons on the map itself cover the basemap, what visitors are allowed to do with the map, and which widgets appear. Lock an opening view from the status bar under the map if you want it to always start in one place.

  6. 6

    Share it

    The map is already live at yourmap.mapji.com. Point a custom domain at it, or copy the embed snippet to put it inside an existing page.

Accounts & sign-in

Accounts are created by signing in — there is no separate registration step and no password to manage. Three providers are supported: GitHub, Google and Microsoft Entra ID (work or school accounts).

Which one you choose matters in exactly one place. Google Sheets live sync reads the sheet as you, so it needs a Google connection — signing in with Google grants Mapji read-only access to spreadsheets and an offline token so the background sync can keep running when you are not at the keyboard. Signed in with GitHub or Microsoft, every other feature works normally; only Sheets sync is unavailable.

The dashboard and your published maps sit on different hostnames — app.mapji.com for editing, yourmap.mapji.com for the live map. Visitors never need an account; published maps are public.

Editor layout

Every map type uses the same editor shell, so the same things are always in the same place. Only the contents change.

AreaWhat lives there
The mapThe working canvas, and a live preview of what visitors see. Style and behaviour changes apply here immediately.
Buttons on the mapTop left of the canvas: Style (basemap, terrain, 3D buildings, contours), Interactions (what visitors can do with the map), Widgets (which on-map widgets appear), and on Draw and Compare a Layers button for background services. A map type that has no use for a popover simply does not show it.
SidebarA tabbed panel beside the map: a list of what is on the map, and the settings for this map type.
Status barA thin strip under the map showing where the camera is, with the opening-view lock.
HeaderThe map name, a link to the live site, and — on the data-driven types — the Import button and the Google Sheets connection.

Sidebar tabs by map type

Most types get a Features list and a Settings tab. Types with a richer editing surface replace or extend them.

Map typeTabs
Draw, Cluster, Heatmap, Time SliderFeatures · Settings
IsochroneMarkers (n/5) · Settings
ChoroplethSelected areas (n) · Settings
Story MapChapters · Settings
Store LocatorSettings only — its location list already lives inside the map panel
Crowdsourced MapPins · Area · Fields · Rules · Display
ComparePer-side editors, one for each half

The Features list is read-only and built for finding things: it has a filter box, and clicking a row flies the map to that feature. It stops at 200 rows, so on a large dataset use the filter rather than scrolling. Settings that belong to the site rather than to the data — search, the opening view — stay available before you have imported anything; type-specific sections show as disabled until there is data to configure.

Your map's thumbnail is captured automatically from the editor canvas while you work, so the dashboard card and the social preview image stay current. Override it any time with your own image under Settings → Appearance.

Status bar

The strip under an editable map is a readout of the current camera. It updates as you pan and zoom.

ReadoutDetail
CentreLatitude and longitude of the middle of the viewport. Click to copy.
ZoomCurrent zoom level to two decimals.
RadiusGround distance from the centre to the edge of the viewport — a quick sense of scale.
Bounding boxThe visible extent, on wider screens only. Click to copy, which is the fastest way to grab a bbox for another tool.
LockPins the current camera as the map's opening view. See below.

Opening view

By default a map opens fitted to its data — whatever you have imported decides the starting camera. That is usually right, and occasionally exactly wrong: a national dataset with one outlier opens zoomed out to nothing, and a map built to show one neighbourhood should not re-frame itself every time the data changes.

Locking the opening view pins the camera. Press the lock in the status bar and the map captures where you are standing right now — centre, zoom, bearing and pitch. From then on the editor, the public map and the embed all open exactly there.

FieldRange
Latitude / longitudeDecimal degrees, typed directly
Zoom0 – 24
Bearing−180° – 180° (rotation, 0 is north up)
Pitch0° – 85° (tilt, 0 is straight down)

Fine-tune the numbers under Opening view in the Settings tab, where each has an input and a slider, and bearing and pitch share a dial preview. On a Crowdsourced Map the same settings live in the Display tab.

A locked view suppresses every automatic camera move, including the re-fit after a new import. If you re-import and the map seems to be ignoring the new data, the lock is why. Deliberate moves still work: clicking a feature in the sidebar or a search result still flies there.

Story Map is the exception and has no lock. Its chapters own the camera, so a fixed opening view would be overwritten by the first scroll. It still shows the readouts.

Choosing a type

Ten types, each built around a different question about your data. The fastest way to choose is to ask what the reader should take away: individual places, density, regional comparison, reachability, change over time, or a narrative.

TypeExpectsSheets syncSearch panel
DrawAnything — you draw it or import itNoYes
ClusterMany pointsYesYes
HeatmapMany points, optionally weightedYesYes
ChoroplethOne value per regionYesYes
IsochroneUp to 5 origin pointsNoYes (origins)
Store LocatorPoints with attributesYesBuilt-in sidebar
Time SliderFeatures with a time columnYesYes
Story MapPlaces plus written chaptersNoNo
Crowdsourced MapNothing — visitors supply itNoYes
CompareTwo datasets, one per sideNoNo

You can change type later from Settings → General, and your imported features are kept. What does not carry across is the type-specific configuration, because it describes a different rendering: a heat gradient means nothing to a store locator. Draw is the one to be careful with — its features are stored where a Cluster or Heatmap import writes, so switching a Draw map to one of those and then importing replaces the drawing.

Draw

A blank canvas for maps you build by hand: markers on the places that matter, a shaded catchment area, a traced boundary, a route between stops. It is the right choice when the map is the data rather than a rendering of a table.

Tools

ToolWhat it does
Add MarkerDrops a pin where you click. Seven pin shapes and eight preset colours from the split buttons beside it.
Add ObjectA marker rendered as an icon instead of a pin, from the Maki or Lucide icon libraries, in any colour and size.
Add ImagePlaces an uploaded image on the map as a marker — a logo, a floor plan pin, a photo.
Add RouteBuilds a multistop route that follows real roads. See below.
Drawing toolbarOn the map itself: point, line, polygon, rectangle, circle and freehand, plus select and delete. Finished shapes can be reshaped vertex by vertex.
Import / ExportImport merges a file into what is already on the canvas — it never replaces it. Export downloads everything as GeoJSON.

Click any feature to open its properties: a name, a description that becomes the popup body, and a colour. Lines show their measured length. Icon markers can have their icon and size changed after the fact from the same panel.

Routes

A route is drawn along the real road network, not as a straight line between points. Build the stop list in a dialog — search an address or switch to picking on the map, insert a stop between two existing ones, reorder by deleting and re-adding.

SettingDetail
Stops2 – 10 per route
Travel modesDriving (car, truck, bus, motorcycle, scooter), cycling (bicycle, mountain bike, road bike), on foot (walk, hike). No public transit.
Stop markersA numbered badge by default; switch any stop to a Maki or Lucide icon, and back again.
What gets savedOne line for the path plus one point per stop, as ordinary features. They export, restyle and delete like anything else you drew.
DeletingDeleting the route line removes its stop markers too. Deleting a single stop leaves the rest of the route alone.

The route's distance and duration are stored on the line, and its length shows in the feature list alongside every other line you have drawn.

Full Draw Map guide

Cluster

Thousands of overlapping pins tell you nothing. A cluster map groups nearby points into a single numbered circle that splits apart as you zoom in, so the shape of the dataset is readable at every scale. Click a cluster to zoom to its contents.

It expects points. Lines and polygons are reduced to a representative point when the map is drawn, so a mixed file still renders — but if your data is mostly areas, a choropleth will say more.

SettingRange / default
Grouping radius20 – 200 px (default 80). Larger means fewer, bigger clusters.
Break apart at zoom0 – 22 (default 14). Past this zoom every point is drawn individually.
Size bandsTwo thresholds — medium at 10 and large at 50 by default — that drive the circle size and colour steps.
Band coloursOne colour per band, all three editable.
SpiderfyFans out points that sit at the same coordinates so each can be clicked. Off by default.
Donut clustersDraws each cluster as a ring split by category instead of a solid circle.

Donut clusters

Pick a property to categorise by, then define the categories. Each is matched either by exact values (one or more values from that column) or by a numeric range. Anything that matches nothing is drawn in a separate uncategorised colour, which is also a quick way to spot dirty data. The result is a cluster that shows composition, not just count — how many of these incidents were severe, how many of these stores are franchises.

Full Cluster Map guide

Heatmap

A heatmap answers “where is this concentrated?” It blurs individual points into a continuous density surface, which makes patterns obvious and individual records unreadable — that is the trade, and it is the reason a heatmap is a poor choice for data someone needs to look things up in.

Points contribute equally by default. Set a weight column and each point contributes in proportion to that number instead, which is what you want for sales figures or population, and what you do not want for raw events where every record already counts once.

SettingRange / default
Colour gradient10 presets, Magma by default — a perceptually even ramp that reads better than the classic rainbow. Also included: Blue → Red, Green → Yellow → Red, Purple → Orange, Cyan → Magenta, Fire, Teal → Yellow, and blue, green and grey monochromes.
Intensity0.5 – 3.0 (default 1). How hot a given density burns.
Radius5 – 50 px (default 20). How far each point's influence spreads.
Opacity0.1 – 1 (default 1).
Weight byAny numeric column, optional. Unset means every point counts once.
Individual points fade in as you zoom past the density surface, so a heatmap stays useful at street level rather than dissolving into a wash of colour.
Full Heatmap guide

Choropleth

Regions shaded by a value: unemployment by county, turnout by constituency, revenue by country. You do not need boundary files — Mapji ships the geometry and you supply the numbers.

Picking the areas

The area picker is a single search box over a catalog of basemaps. Start with the whole world or a continent, or search for a country and pick the level you want inside it. Choose an entry and you land on a checkbox grid of its regions, so you can take all of them or just a subset.

LevelCoverage
CountriesEvery country, from the geoBoundaries open dataset (ADM0).
States / provincesFirst-level subdivisions wherever geoBoundaries publishes them (ADM1).
Counties / districtsSecond-level subdivisions where available (ADM2).
NUTS 1 / 2 / 3The European statistical regions, from Eurostat — the levels most EU data is published against.
Your own boundariesUpload a GeoJSON, TopoJSON, KML, KMZ, GPX or zipped Shapefile and nominate the property that names each region. Use this for sales territories, school catchments, delivery zones — anything with no official code.

Areas appear immediately, grey until they have data, and you can come back and add more at any time without disturbing the values already entered.

Attaching values

Upload a CSV or Excel file with a region column and a value column, connect a Google Sheet to keep the values live, or type them straight into the table in the sidebar. The join tries the region name first, then the official code (ISO 3166-2 or the NUTS code), then the country, then an internal identifier, then a partial name match — so “Bavaria”, “Bayern” and DE-BY all find the same region. Anything that fails to match is listed before you commit, so a typo is visible rather than silently absent.

SettingDetail
Colour scales8 presets — 5 sequential (blues, greens, reds, oranges, purples) for low-to-high, and 3 diverging (red–blue, red–green, brown–teal) for data with a meaningful midpoint.
RangeCalculated from your values, or set manually so several maps share one scale.
LegendGenerated from the scale and the range.
EditingValues can be corrected inline, and individual regions removed, without re-uploading.
A choropleth stores a resolved copy of the boundary geometry, so an existing map is never affected by changes to the underlying boundary datasets.
Full Choropleth Map guide

Isochrone

An isochrone shades everywhere you can reach from a point within a given time or distance, following the real network rather than drawing a circle. “Fifteen minutes’ walk” is a far more useful catchment than “one kilometre”, and the two look nothing alike once rivers and motorways are involved.

SettingOptions
OriginsUp to 5 points, each nameable and given its own icon
Travel modesWalk, bike, car, transit
Time bands5, 10, 15, 30, 45 and 60 minutes
Distance bands500 m, 1 km, 2 km, 5 km and 10 km
ModeTime or distance — one or the other, with as many bands selected as you like

Place origins by clicking the map, or import a point file to seed them (the first five are used). Bands are drawn as nested translucent polygons, colour-coded from nearest to furthest, over any basemap.

The polygons are computed in the editor and stored with the map, so the published map draws them straight from your saved copy and never calls the routing service. Visitors get an instant render, and a busy public map costs nothing extra. Change an origin or a band and regenerate to update them.
Full Isochrone Map guide

Store Locator

A searchable directory with a map attached: a scrollable list of locations beside the map, filters down the side, and a detail panel for each one. This is the type to reach for when the visitor has a task — find the nearest branch, find one that is open now, find one that does the thing they need.

Search and filters

Free-text search covers every field on every location, so a visitor can type a city, a postcode already in your data, a manager's name or a service. On top of that you define faceted filters from your own columns:

  • Select — one choice from a dropdown.
  • Multi-select — several choices at once, and a comma-separated cell counts as belonging to each of its values, which is what makes a “services offered” column work properly.
  • Range — a numeric slider.

Any one filter can also drive the map: nominate it and each of its options gets its own marker icon, so branches, kiosks and warehouses are distinguishable at a glance without opening anything.

Cards and detail

SettingDetail
Display fieldsTitle, subtitle, description and image, each mapped to one of your columns
Extra fieldsUp to 5 more, typed as text, phone, email or URL so they render as the right kind of link
Working hoursPoint at an hours column — plain text, structured JSON, or let Mapji work it out — to get an open-now badge
Near MeA geolocation button that sorts by distance from the visitor. Off by default.
ClusteringGroups nearby markers on the map. On by default.
AppearanceAccent, panel, card, text and border colours, font, title size, corner radius, card style, and a sidebar width of 280 – 600 px
The panel colours you set here are your data, not a UI theme — they stay exactly as configured whether the visitor's browser is in light or dark mode.
Full Store Locator guide

Time Slider

A timeline under the map that steps through your data one period at a time, with play, pause and scrub. Use it when when is as much of the story as where — an outbreak spreading, a chain opening branches, a fleet moving through a day.

It needs one column holding the time. Mapji tries to detect it on import; confirm or change it in Settings, along with how the values should be read.

SettingOptions
Time formatISO date (YYYY-MM-DD), Unix timestamp (seconds since 1970), or custom — displayed exactly as written, which suits labels like quarters or era names
Label formatAn optional pattern for how each step is written — YYYY, MMM, MMMM, DD, HH, mm, with literal text in [brackets]
StepsOne per distinct value, or grouped into calendar periods — hourly, daily, weekly, monthly, quarterly, yearly — or a fixed number of equal bins
What's on screenJust the current step, everything up to it, or a rolling window of the last few steps
TrailsEarlier periods stay on the map behind the current one and fade toward an opacity floor over a chosen number of steps, so age reads as distance from the cursor
Playback speed0.25s, 0.5s, 1s, 2s, 3s or 5s per step
LoopRestart from the beginning when the timeline ends
Cross-fadeFade features in and out across a step instead of cutting between them
MarkersCircles in any colour and size, or a Maki or Lucide icon; either can take its colour — and an icon its glyph — from a category column, and its size from a number column
Density barsA bar per step behind the slider showing how many features fall in it
LegendLists each value of the category column on the map
PopupChoose which properties a marker shows when clicked
PanelCustom title, and the option to start collapsed so the map is not covered on load
A column of exact timestamps has a distinct value per record, so stepping one value at a time gives a slider nobody can use, and draws a gap between 1992 and 2020 as a single notch. Group the steps into calendar periods instead and the timeline is spaced by elapsed time — no need to round your data before importing.
Full Time Slider Map guide

Story Map

Long-form writing beside a map that moves as the reader scrolls. Each chapter has its own text and its own camera; crossing into a chapter flies the map to that place. It is the format for a journey, an investigation, a field report, a guided tour.

Write chapters by hand, or import a point file to get one chapter per feature and edit from there. Chapter text is Markdown, so headings, links, emphasis and lists all work.

Per chapterOptions
CameraCentre, zoom, bearing 0 – 360°, pitch 0 – 85°, and a flight duration (2000 ms by default)
MarkerShow or hide it; a Maki or Lucide icon, or the chapter number, in any colour and size
AnimationSeven presets — none, fade, slide up, slide left, scale in, blur in, spring — with an optional delay
Whole storyOptions
Scroll triggerWhere in the viewport a chapter becomes active — the middle by default
Progress indicatorOn or off, down the left or right edge
Center crosshairOff by default; six styles — cross, dot, reticle, target, frame, pin — in any color, 32–160 px, at any opacity
AppearancePanel and card colours, font, title size, corner radius, card style, and a panel width of 280 – 600 px
NavigationScrolling, plus keyboard
Story Map is the one type with no opening-view lock, because its chapters own the camera. Pair it with 3D terrain and a tilted pitch for landscape stories — the combination is what pitch is there for.
Full Story Map guide

Crowdsourced Map

The one type you do not supply data for. Visitors drop a pin, fill in a form you designed, and their submission arrives in a moderation queue. Approve it and the pin joins the public map. Community reporting, field surveys, directories, contests, citizen science.

1. Define where pins may go

Area modeBehaviour
GlobalAnywhere on Earth
RegionOne or more countries, states, counties or NUTS regions, picked by name
Bounding boxA rectangle, drawn on the map or typed as coordinates
PolygonAny shape you draw — a city limit, a park, a catchment

Whatever you choose is rendered as a spotlight: everything outside the area is dimmed and the allowed region is a clear window, so visitors can see where they are allowed to contribute before they try.

Region searches the same boundary catalog the choropleth map uses — geoBoundaries for countries, states and counties worldwide, and Eurostat NUTS levels across Europe. Pick “Serbia”, or three counties in Germany, and pins are held to the real administrative border rather than a box you eyeball. The boundary is simplified for display, so a pin within a few hundred metres of the border may fall on either side; draw a polygon when you need an exact line.

2. Build the form

Fourteen field types: text, textarea, number, email, URL, date, time, phone, rating, select, radio, multiselect, checkbox and image. Six starter templates — report a pothole, business listing, photo contest, event submission, site review, sighting log — give you a working form to adapt. A live preview shows exactly what visitors will see as you build.

  • Validation per field — required, minimum and maximum, maximum length, a regular expression, and how many options a multiselect accepts.
  • Conditional fields — show a field only when another one equals, does not equal, has any value, or is empty.
  • Multi-step forms — assign fields to steps and visitors get a wizard with a progress bar instead of one long page.

3. Set the rules

SettingDefault
Open for submissionsOpen. Turn it off, or set a closing date and time, and the form stops accepting entries with a message you write. Approved pins stay on the map either way — closing stops new submissions, it does not take the map down.
Auto-approveOff. On, submissions skip the queue and appear immediately — worth turning on only once you have watched the abuse defences hold.
Rate limit5 submissions per hour and 20 per day, per visitor
Image uploadsAllowed, 1 attachment per submission (up to 5), 5 MB each. JPEG, PNG and WebP only, verified by inspecting the file itself rather than trusting what it claims to be.
HoneypotOn. An invisible field with a name unique to your map that bots fill in and humans never see.
CAPTCHAOff. Cloudflare Turnstile can be switched on when a campaign attracts attention.
Allowed originsUnrestricted. Set a list and the form only accepts submissions from pages you name, which is how you lock an embed to your own site.

4. Emails and webhooks

  • You get an email when a submission needs review — and optionally for auto-approved ones too. It links straight to that submission in the dashboard. Send them somewhere other than your account address if you like.
  • Visitors can be emailed a confirmation when they submit and a notice when their submission is approved or rejected — both off by default, and both only possible if your form collects an email address.
  • Webhooks post JSON to your endpoint on any combination of four events: created, approved, rejected, marked spam. Each request carries an X-Mapji-Signature header — an HMAC of the body using your shared secret — so your receiver can prove it came from Mapji. Failures are retried, and the last deliveries are listed in the editor so you can see what your endpoint actually returned.

5. Choose what the public sees

SettingOptions
Public visibilityHidden (nobody sees approved pins), pins only, or pins with a details popup
Pin renderingClustered (default), heatmap, or every pin drawn plainly
Field mappingWhich fields become the pin's title, description, image, colour and value
Public fieldsAn allowlist. Only mapped fields and fields you tick here are ever published — everything else stays in the dashboard, which is how you collect a phone number without publishing it.
FeedbackThe success message, or a URL to redirect to after submitting
After submitting, the visitor's own pin appears on the map immediately in amber, distinct from the green approved pins, for the rest of their session. They see their contribution land without waiting on moderation, and nobody else sees it until you approve it.
Full Crowdsourced Map guide

Compare

Two maps of the same place, locked to the same camera, so a reader can hold one dataset against another. Before and after, plan and reality, two years, two scenarios.

SettingOptions
LayoutSwipe — both maps full-bleed with a draggable divider revealing one under the other — or split, two half-panes side by side
OrientationLeft/right or top/bottom
SyncAlways on in swipe (the maps overlap, so they must agree). Optional in split, if you want the halves to move independently.
LabelsA caption per side, shown over the map

Each side is configured independently and holds its own dataset, imported from its own button in the sidebar.

Per sideOptions
Display modeOverlay (the raw geometry, with fill, line and circle styling), heatmap, cluster, or isochrone from a single origin
BasemapInherit the site's theme, any of the seven built-ins, or one of your custom themes
Background layersIts own list, independent of the other half
ColoursIts own accent, used consistently across every mode
Compare has no Style button — one button cannot speak for two maps — so basemaps are chosen per side in the sidebar instead. Terrain, 3D buildings and contours follow whatever the site has saved and are not adjustable here. Google Sheets sync and the search panel are also unavailable, both because there are two datasets and each assumes one.
Full Compare Map guide

Importing files

One import pipeline serves every map type. It reads the file server-side, normalises it to WGS84 and hands it to whichever type you are working in — so a Shapefile and a KML behave identically once they are in.

FormatExtensions
GeoJSON / TopoJSON.geojson .json .topojson
Shapefile.zip containing at least .shp, .shx, .dbf and .prj — reprojected for you
Google Earth.kml .kmz
GPS tracks.gpx
Spreadsheets.csv .xlsx .xls with latitude and longitude columns

Every one of these works on every map type that imports at all — which is all of them except Crowdsourced Map, whose data comes from visitors.

Where the Import button is

Most types import from the Import button in the editor header. Four import from their own surface instead, because each needs to know something the generic dialog does not:

Map typeWhere
Cluster, Heatmap, Choropleth, Store Locator, Time SliderThe Import button in the editor header
DrawImport in the drawing toolbar — merges into the canvas
Story MapThe chapter builder — one chapter per feature
IsochroneThe origin picker — seeds up to 5 origins
CompareThe per-side button in the sidebar

Spreadsheets

A spreadsheet is converted in your browser, so you see a preview of the columns before anything is uploaded. Latitude and longitude are detected from common column names; confirm or correct them in the mapping dialog. Every other column is carried onto the features as a property, which is what makes it available later to search, filters, popups, cluster categories and heatmap weights.

Only the first sheet of a workbook is read, and coordinates must be decimal degrees — 52.3676, not 52° 22' 3" N. Rows with a blank or out-of-range coordinate are skipped rather than plotted somewhere wrong.

Re-importing

If the map already has data, you are asked whether to replace it or add to it. Draw always merges — it would otherwise delete the drawing you are in the middle of — and Compare always replaces the side you are importing into.

Your appearance settings survive either way. The one thing that does not is configuration that names a column of the old data: if a heatmap's weight column is missing from the new file the weighting is dropped back to unweighted, and if a time slider's time column is gone the slider configuration is cleared and re-detected — a slider pointing at a column that no longer exists renders nothing at all, which is worse than starting over.

Geometry handling

Draw, Cluster, Heatmap, Time Slider, Choropleth and Compare accept any geometry. Store Locator, Story Map and Isochrone are point-based, so lines and polygons are reduced to a representative point on import. Features with no usable coordinates are dropped.

Google Sheets live sync

Instead of uploading a file, connect a Google Sheet and the map follows it. Your team keeps editing the spreadsheet they already use; the map updates itself. This is the right answer whenever the data has an owner who is not the person who built the map.

  1. 1

    Paste the sheet URL

    Any spreadsheet your Google account can read. It does not need to be shared publicly.

  2. 2

    Pick the tab

    One tab per map. Mapji lists what the workbook contains.

  3. 3

    Map the columns

    Latitude and longitude, plus title and description. A time column for a Time Slider, region and value columns for a Choropleth, a weight column for a Heatmap. Optionally pass every remaining column through as feature properties — do this if you plan to search or filter on them.

  4. 4

    Leave it running

    Mapji re-checks the sheet about every five minutes and rewrites the map only when the contents have actually changed. There is a Sync Now button for an immediate pull, and a status widget showing the last successful sync and any error.

FactDetail
Supported typesCluster, Heatmap, Choropleth, Store Locator, Time Slider
Not supportedDraw, Isochrone, Story Map, Crowdsourced Map, Compare — each has its own data flow
AccessRead-only. Mapji requests only the read scope, so it cannot write to, reformat or delete anything in your spreadsheet.
Sign-inRequires a Google connection, since the sheet is read as you
Row limitThe first 10,000 mappable rows; the status widget reports how many were skipped
A sync only runs while the map type still supports it. Change a synced map to Draw or Story Map and the sync parks itself with an error rather than writing data into a row that type would overwrite. Change it back and it resumes.

Visitor submissions

A Crowdsourced Map gets its own dashboard page for reviewing what comes in. It is laid out like a map editor rather than a report: a list of submissions beside a live map. Clicking a row flies the map to its pin; clicking a pin selects and scrolls to its row. Pins are coloured by status, and the map mirrors whatever filter is active rather than only showing approved pins.

CapabilityDetail
ModerateApprove, reject or mark spam — one at a time from the row, or in bulk across a selection
FilterBy status, by name or email, by whether a photo was attached, and by a date range
InspectA detail view with every field value, the attached photos, and the visitor's own coordinates
CorrectEdit field values and move the pin, for the submission that got the right information into the wrong place
ExportEverything currently filtered, as CSV
Deep linksEvery submission has its own URL, which is what the notification email links to

Submissions are rendered against the form as it was when they were made. Change your form later and old submissions still display with the questions their author actually answered, rather than being reshaped to fit the current version.

Marking a submission as spam permanently deletes its photos. This is deliberate — it keeps storage from filling with abuse — but it cannot be undone, so reject rather than spam anything you might want to revisit.

What is recorded about visitors

To make moderation possible, each submission records what the request revealed: IP address, an approximate country, region, city and timezone, the page it was submitted from, and the browser and device. It is used for rate limiting and for judging whether a batch of submissions is genuine.

This is personal data and it is visible only to you, the map's owner. It is never published to the map, never included in the public GeoJSON, and never shown to other visitors. If you collect submissions from the public, say so in your own privacy notice.

Limits

LimitValue
Features per data source10,000
Import file size25 MB
Google Sheets rows per sync10,000 mappable rows
Isochrone origins5 per map
Route stops2 – 10 per route
Background layers5 per map, or 5 per Compare side; up to 8 source layers from one vector archive
Form field types14
Submission attachmentsUp to 5 per submission, 5 MB each by default
Map name32 characters
Map description140 characters in the create dialog
404 message240 characters
Thumbnail / logo upload10 MB
Web addressLetters, numbers and hyphens; a short list of reserved names is unavailable

Over the feature limit, the usual answers are to aggregate before importing (one row per region rather than per event), to split the dataset across several maps, or to publish it as a background layer, which is fetched live and is not subject to the cap.

Basemap themes

The basemap is what your data sits on. Seven are built in, and switching between them is instant and non-destructive — your data and every setting are untouched. Change it from the Style button on the map.

ThemeDescription
LightA clean, low-contrast vector map. The default, and the safest backdrop for coloured data.
DarkThe same map inverted — good for bright markers and heatmaps.
WhiteNear-blank: geometry with almost no fill. Maximum contrast for the data on top.
BlackThe inverse, for dark presentations and screens.
GrayscaleNeutral monochrome, so the only colour on the map is yours.
SatelliteAerial and satellite imagery, on its own.
HybridThe same imagery with roads, boundaries and place names drawn over it — usually what people mean when they say satellite.

Vector themes are drawn from OpenStreetMap data via Protomaps; imagery comes from Esri World Imagery. Attribution is rendered on the map automatically.

Custom themes

When none of the seven fits — a brand palette, a print style, a deliberately quiet backdrop — build your own. Custom themes are saved to your account and can be applied to any of your maps from the Style picker, so one theme can carry a whole set of maps. Create and edit them under Settings → Custom Map Styles, with a full live map beside the editor.

TabWhat you control
ColoursAround 45 individually settable colours: water, land, parks, woodland, scrub, sand, beach, glacier, buildings, hospitals, schools, industrial, airports, every road class and its casing, bridges, tunnels, boundaries, and every label and halo.
RoadsA width scale per group — highway, major, minor, railway, boundaries — plus whether roads get a casing and how thick it is.
DashesA dash pattern per line class: solid, dashed, dotted, long dash or dot-dash. This is what turns a boundary into a dotted line or a railway into a proper hatched track.
LabelsHalo width and text size, plus independent zoom bands controlling when buildings, POIs, minor roads and labels appear at all — the most effective way to quieten a busy map.
PatternsTileable textures over parks (forest hatch, forest dots, park cross), water (wave) and beach (stipple), at an opacity you set. Useful for a hand-drawn or cartographic look.

Start a custom theme from any of the five vector themes as a base, then override only what you need. Editing a saved theme updates every map using it.

Terrain, 3D buildings & contours

Three optional layers, toggled from the Style button and available on any theme. They work together — terrain with a tilted pitch and contours makes a landscape map, buildings with terrain makes a city one.

LayerWhat it adds
3D terrainReal elevation, so the ground has relief. Combined with automatic hillshading, tuned per theme so it reads on light and dark basemaps alike. Tilt the map to see it.
3D buildingsReal building footprints extruded to their real heights, from the Overture Maps dataset. They appear from zoom 13, so tilt in over a built-up area to see them.
Contour linesElevation contours generated from the same terrain data, with the interval chosen for the zoom level, major and minor lines distinguished, and elevations labelled.
These are visual layers, not data. They are drawn from global sources at render time, so they never count against your feature limit and never appear in an export.

Background layers

Draw and Compare maps can render a published map service beneath your own data: aerial imagery, a cadastral layer, a scanned historical sheet, a soil or flood dataset. Nothing is imported — the tiles are fetched live from the publisher every time someone opens your map, so the layer stays current and none of it counts against your feature limit. Add one from the Layers button. On a Compare map each side keeps its own list, so you can put imagery behind one half and a reference layer behind the other.

ServiceWhat to paste, and what happens
WMSThe service URL. Mapji reads its capabilities document and lists every layer it publishes so you can pick one or several. Versions 1.1.1 and 1.3.0 are both handled; projection, image format and tile size are worked out for you.
ArcGISA MapServer or ImageServer endpoint. A cached service is drawn straight from its tiles where the cache allows it and rendered on demand where it does not — either way you just paste the URL.
PMTilesA single-file tile archive on ordinary storage — S3, R2, or any static host that serves byte ranges. Image archives draw as imagery; vector archives let you pick which of their layers to draw, up to eight, and in what colour.
XYZ tilesAny standard {z}/{x}/{y} tile template, which covers most published raster tile sets and anything you host yourself.
BehaviourDetail
How manyUp to 5 per map, or per Compare side
StackingAlways beneath your own markers and shapes, and beneath the basemap's place names, so nothing you added disappears behind a backdrop
AdjustingReorder, set opacity, and hide one temporarily without removing it — none of which reloads the tiles
Vector archivesAuto-styled in one accent colour, with fills, outlines and points drawn correctly whatever the layer contains. A reference layer, not a second map editor.
The service must be served over HTTPS and must permit browser access (CORS). Some services that work perfectly in desktop GIS do not, because a desktop client is not subject to the same rules. Mapji fetches a real tile when you add the layer and tells you immediately rather than saving a layer that would render blank. A PMTiles host must also support range requests.

Interactions

What visitors are allowed to do with the map. All seven are on by default, and they apply to the published map and to embeds — not just the editor preview. There is a Lock all / Unlock all switch for kiosk-style displays and static illustrations.

InteractionEffectDefault
Drag panClick and drag to move the mapOn
Drag rotateRight-click and drag to rotate and tiltOn
Scroll zoomZoom with the wheel or trackpadOn
Double-click zoomZoom in on double-clickOn
Touch zoom & rotatePinch and twist on touch devicesOn
Box zoomShift-drag to zoom to a rectangleOn
KeyboardArrow keys to pan, +/− to zoomOn
The one most worth changing: turn scroll zoom off for a map embedded in a long article. Otherwise a reader scrolling past gets trapped zooming the map instead of moving down the page. Leave drag pan and the zoom buttons on so exploring is still possible — just deliberate.

Map widgets

Which widgets appear on the published map. These also save with the site and apply to visitors, from the Widgets button on the map.

WidgetWhat it doesDefault
Zoom buttonsPlus and minus, top rightOn
CompassNorth indicator; click to reset bearing and pitchOn
Scale barA distance reference in the cornerOn
Locate meCentres on the visitor's location. Needs their permission, so it is off unless the map is about where they are.Off
FullscreenExpands the map to fill the screenOff
MinimapA small overview map in the corner showing where the main view sitsOff
ExportLets visitors download the current view as an image or documentOff

The export widget

Worth enabling when people will want to put your map in a report or a slide. It downloads exactly what is on screen, at print resolution.

OptionChoices
FormatPNG, JPG, PDF or SVG
Resolution72, 96, 200, 300 or 400 DPI
Page sizeLetter, A2 – A6, B2 – B6
OrientationLandscape or portrait

Search & filters

A search and filter panel can be added to most map types, letting visitors search across the fields you choose and narrow the map with faceted filters. It searches your data — the columns you imported — not the world. Mapji has no geocoder, so a query matches feature properties rather than street addresses.

Available on Draw, Cluster, Heatmap, Choropleth, Time Slider, Isochrone and Crowdsourced Map. Store Locator is excluded because its sidebar already has a richer search built on the same engine; Story Map and Compare do not offer it. On a Choropleth the region name and value are searchable as “Region” and “Value”; on an Isochrone the search covers your named origin markers.

Filter types are inferred from your data

When you add a filter, Mapji reads the column and picks the control that fits it:

ControlChosen when
Range sliderMore than 80% of the values are numeric
Dropdown10 or fewer distinct values
Multi-select11 to 30 distinct values
Not offeredMore than 30 distinct values — a filter with that many options is a worse search box

Comma-separated cells are split into separate values, so one row can match several options in a multi-select. That is what makes a “services offered” or “tags” column behave the way people expect.

Panel settings

SettingOptions
Title and placeholderYour own wording
PositionAny of the four map corners
Start collapsedUseful on a small map where the panel would cover the data
Results listShow matching features as a list. On by default.
Fly to matchesMove the map to fit what matched. On by default.
Highlight colourHow matched features are emphasised
Searchable fieldsSpecific columns, or all of them
Result labelWhich column names each result; auto-detected if unset

Configured under Search & filter in the Settings tab. Because it lives on the site rather than on the imported data, it stays reachable before you have imported anything.

Site settings

Four tabs, reached from Settings in the map editor.

General

  • Name — the map title, up to 32 characters. It is also the page title search engines show, so make it descriptive rather than internal.
  • Description — the meta description on search results and link previews.
  • Map type — switch between the ten types. Your features are kept; the type-specific configuration is not.
  • Delete — removes the map and its data permanently.

Domains

Every map is published at yoursubdomain.mapji.com from the moment it is created. The subdomain is generated from the name and can be changed here — letters, numbers and hyphens, with a short list of reserved names unavailable.

To use your own domain, enter it and Mapji shows the DNS records to add at your registrar, then verifies them and issues an HTTPS certificate. An apex domain and a subdomain such as maps.yourbrand.com both work. Until verification completes the map keeps serving on its mapji.com address.

Appearance

This tab is about the page around the map, not the map style — for that see basemap themes.

SettingDetail
ThumbnailThe preview image used on link shares and in your dashboard. Captured from your map automatically; upload your own to override. PNG or JPEG up to 10 MB, ideally 1200×630.
LogoShown on the published site. PNG or JPEG up to 10 MB, ideally 400×400.
Heading fontThe typeface for headings on the site.
404 messageWhat a visitor sees at a URL on your site that does not exist. Up to 240 characters.

Embed

Builds the iframe snippet — see Embedding.

Embedding

Every published map has a separate embed URL and a generated <iframe> snippet, built in the Embed tab of Settings. It works anywhere that accepts an HTML embed — a CMS, a blog post, a documentation site, a landing page.

OptionChoices
WidthFull (100%) or a fixed pixel width. Full is almost always right — it lets your page decide how much room the map gets, and fixed widths break on phones.
HeightIn pixels
Corner radius0, 4, 8, 16 or 24 px
Allow fullscreenAdds the attribute the fullscreen widget needs to work inside an iframe
Auto-resizeAdds an optional listener script — see below

Auto-resizing the height

An iframe cannot work out how tall its contents want to be, so you either guess a height or use the listener script offered alongside the snippet. With it on the page, the embed reports its content height and the iframe resizes to match — which matters most for a Crowdsourced Map, where the form grows as validation messages appear. Add the script once per page: it matches each message to the iframe it came from, so a single copy handles every Mapji embed on the page, including two copies of the same map.

Behaviour inside an embed

Interaction and widget settings apply to embeds exactly as they do to the published map, so configure them with the embedding context in mind — see the note under Interactions about scroll zoom. A Crowdsourced Map accepts submissions from inside an embed; if you want it to accept them only there, set the allowed-origins list in its Rules tab.

Embeds and SEO

The embed URL is excluded from search engines on purpose, so it never competes with the page you put it on. Your published map on its own subdomain or custom domain stays crawlable, so link to it directly as well if you want the map itself to rank as a destination.

Keep going

This page is the reference. For worked examples — turning a spreadsheet into a map, building a store locator, running a crowdsourced campaign — see the guides. Short answers to specific questions live in the FAQ, and anything not covered here can go to support.