agentsclimarketplace

Datawrapper

Skill ondata/skills/skills/datawrapper

Curated AI skills for open data workflows — tool-agnostic instructions following the Agent Skills open standard

Install
npx -y skills add ondata/skills --skill datawrapper

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Create charts, choropleth maps, and locator maps via the Datawrapper API. Use this skill whenever the user wants to publish a visualization on Datawrapper, create an interactive chart or map from data, generate a PNG/embed from Datawrapper, or use the Datawrapper REST API. Triggers on: "create a map with datawrapper", "publish a chart on datawrapper", "choropleth map", "locator map datawrapper", "export PNG from datawrapper", and any request involving creating or configuring Datawrapper charts/maps programmatically. Also triggers for Italian variants: "mappa coropletica datawrapper", "crea grafico datawrapper", "mappa datawrapper".

SKILL.md

5.9 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Datawrapper API — Skill

Create and publish Datawrapper charts and maps via REST API.

Auth: Authorization: Bearer $DATAWRAPPER_API (env var — never print the value). Base URL: https://api.datawrapper.de/v3


⚠️ Step 0 — Verify API key before anything else

curl -s -o /dev/null -w "%{http_code}" \
  "https://api.datawrapper.de/v3/me" \
  -H "Authorization: Bearer $DATAWRAPPER_API"
  • 200 → key is valid, proceed.
  • 401 or 000 → key is missing or invalid. Stop and tell the user:

    "DATAWRAPPER_API is not set or invalid. Set it with export DATAWRAPPER_API=<token> (Linux/macOS) or $env:DATAWRAPPER_API='<token>' (PowerShell)."

Do NOT proceed past a non-200 — all subsequent calls will fail silently.


Chart types

Visualizationtype value
Stacked bard3-bars-stacked
Grouped bard3-bars
Lined3-lines
Scatterd3-scatter-plot
Pie/donutd3-pies
Choropleth mapd3-maps-choropleth
Locator maplocator-map

Quick reference by task

Always read the relevant reference file before starting — each file contains the exact step sequence, mandatory properties, and known pitfalls.


Common steps (all types)

1. Create the visualization

CHART_ID=$(curl -s -X POST "https://api.datawrapper.de/v3/charts" \
  -H "Authorization: Bearer $DATAWRAPPER_API" \
  -H "Content-Type: application/json" \
  -d '{"title": "My title", "type": "<type>"}' \
  | jq -r '.id')
echo "Chart ID: $CHART_ID"

Always capture the id — needed for all subsequent calls. Print it immediately.

2. Upload data (CSV)

curl -s -X PUT "https://api.datawrapper.de/v3/charts/$CHART_ID/data" \
  -H "Authorization: Bearer $DATAWRAPPER_API" \
  -H "Content-Type: text/csv" \
  --data-binary @/path/to/data.csv

3. Configure metadata (PATCH)

curl -s -X PATCH "https://api.datawrapper.de/v3/charts/$CHART_ID" \
  -H "Authorization: Bearer $DATAWRAPPER_API" \
  -H "Content-Type: application/json" \
  -d '{ "metadata": { ... } }' \
  | jq -r '.id // .'

PATCH does a deep merge — each call merges into existing metadata. Old keys persist. To fully replace a nested object, include ALL its keys in a single PATCH call, or create a fresh chart.

4. Publish

curl -s -X POST "https://api.datawrapper.de/v3/charts/$CHART_ID/publish" \
  -H "Authorization: Bearer $DATAWRAPPER_API" > /dev/null

5. Export PNG

Always wait at least 6 seconds after publish before exporting. Datawrapper's CDN takes a moment to update — exporting immediately returns the previous render. Use scale=2 to export at double resolution. Omit height so Datawrapper uses the natural chart height — avoids large blank areas on short charts.

sleep 6

curl -s "https://api.datawrapper.de/v3/charts/$CHART_ID/export/png?unit=px&width=1200&scale=2" \
  -H "Authorization: Bearer $DATAWRAPPER_API" \
  --output output.png

Always read the exported PNG visually to verify it looks correct before reporting success.

6. Offer to delete the chart

After verifying the PNG, ask the user:

"The PNG has been saved locally. Do you want to delete the chart from Datawrapper?"

If yes:

curl -s -X DELETE "https://api.datawrapper.de/v3/charts/$CHART_ID" \
  -H "Authorization: Bearer $DATAWRAPPER_API"

If no, remind the user the chart is available at: https://app.datawrapper.de/chart/<CHART_ID>/visualize


Add descriptive metadata (recommended for all types)

Always include units of measure (number-append/number-prepend) when values have a unit — percentages, euros, kilometres, etc. An axis without a unit label is always wrong.

{
  "metadata": {
    "describe": {
      "source-name": "Data source name",
      "source-url": "https://source-url.com",
      "intro": "Chart or map description",
      "byline": "Author or organization",
      "number-append": " %",
      "number-format": "0.0"
    },
    "annotate": {
      "notes": "Methodology notes, caveats"
    }
  }
}

See references/chart.md for the full units-of-measure reference.


Inspect what Datawrapper stored

curl -s "https://api.datawrapper.de/v3/charts/$CHART_ID" \
  -H "Authorization: Bearer $DATAWRAPPER_API" \
  | jq '.metadata'

Use this to debug when the output doesn't look right — verify what properties Datawrapper actually stored vs. what you intended to send.


Delete a chart

curl -s -X DELETE "https://api.datawrapper.de/v3/charts/$CHART_ID" \
  -H "Authorization: Bearer $DATAWRAPPER_API"

Useful when iterating: delete a broken chart and start fresh to avoid deep-merge conflicts from previous PATCH calls.


Manual fallback (browser editor)

If something doesn't render correctly via API, the user can inspect and fix it at https://app.datawrapper.de/chart/<ID>/visualize. After manual edits, read back the config via GET to make it reproducible via API.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.