Dataset Charts & Report (Chart Images + PDF from Any Data)
Pricing
from $30.00 / 1,000 chart rendereds
Dataset Charts & Report (Chart Images + PDF from Any Data)
Turns any Apify dataset, CSV/Excel/JSON file URL or JSON array into chart images (bar, line, area, pie, scatter as PNG and SVG) and an optional PDF or HTML report with KPIs and a plain-English summary. Define charts by field names. Charged per chart and per report; agent-ready via x402 and MCP.
Pricing
from $30.00 / 1,000 chart rendereds
Rating
0.0
(0)
Developer
Adam Pearce
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
You have the data. You need the chart, or the one-page report, now, without opening a spreadsheet. Dataset Charts & Report takes any Apify dataset, a CSV, Excel or JSON file by URL, a Google Sheet, or rows you paste in, and turns it into finished chart images (bar, line, area, pie, donut, scatter, as PNG and SVG) and an optional PDF or HTML report with KPIs, one-line captions, a data preview and, if you want it, a plain-English summary. You name the fields; it groups, aggregates, draws and files. No browser, no design tool, no code.
Built for people who need a chart in Slack, an email or a slide, and for AI agents that cannot draw: one call turns rows into image and PDF links the agent can hand back.
Why use Dataset Charts & Report?
Every scraper and every pipeline ends in rows. Rows are not what you show a client, a boss or a customer. The usual fix is a spreadsheet, a screenshot and twenty minutes, every time the data changes. This Actor is that last step as a reusable, scheduled, API-callable job:
- The weekly report: chain it after any scraper on a schedule and get a PDF with the same four charts every Monday.
- A chart in Slack or Notion: point the webhook at a Slack incoming webhook or a Make/Zapier/n8n hook and the PNG link arrives the moment the run finishes.
- Client-ready deliverables: title, subtitle, KPIs, charts with captions and a data table on A4, in your accent colour, light or dark.
- Agents and automations: an AI agent that has scraped or cleaned data can call this Actor to visualise it, then read the returned image and report URLs. Pay per chart, no account setup, agent-ready via x402 and MCP.
- Any data shape: grouping and aggregation (sum, count, mean, median, min, max, distinct) happen inside the chart definition, dates are bucketed by day, week, month, quarter or year automatically, numbers like "£3,120" or "49 USD" are read correctly, and long tails are folded into "Other".
Because it runs on Apify you get scheduling, API access, integrations and run history for free, and it fits directly after the other Nero Labs dataset tools (listed at the end of this page).
How to use Dataset Charts & Report
- Click Try for free (or Start) on this Actor.
- Bring in your rows: pick a dataset, paste a File URL (CSV, Excel, JSON, JSON Lines or a Google Sheet shared as "Anyone with the link can view"), or paste rows into Data (inline).
- Define your charts as a short JSON list. Each chart needs an
xfield; add ayfield to aggregate a number, or leaveyout to count rows. - Choose the image formats, size and theme, and whether you want the report (PDF and/or HTML) with a title.
- Run. Every chart comes back as a row with its PNG and SVG links, the report as a row with its PDF and HTML links, and all files sit in the run's key-value store.
The default input draws three charts (revenue by category, revenue by month, jobs by region) from twelve sample rows and builds a two-format report in a few seconds, so you can see exactly what you get before pointing it at your own data.
Defining charts
[{ "type": "bar", "title": "Revenue by category", "x": "category", "y": "revenue", "aggregate": "sum" },{ "type": "line", "title": "Revenue by month", "x": "date", "y": "revenue", "timeUnit": "month" },{ "type": "donut", "title": "Jobs by region", "x": "region" },{ "type": "stackedBar", "title": "Units by region and category", "x": "region", "y": "units", "series": "category" },{ "type": "scatter", "title": "Units vs revenue", "x": "units", "y": "revenue", "series": "category" }]
| Key | What it does | Default |
|---|---|---|
type | bar, horizontalBar, stackedBar, line, area, pie, donut, scatter | bar |
x | The field for the categories, the dates, or the horizontal axis. Dotted paths like address.city work | required |
y | The numeric field to aggregate. Leave out to count rows | none, so count |
aggregate | sum, count, mean, median, min, max, distinct | sum if y is set, else count |
series | A field to split into coloured series (up to 10, the rest merged into Other) | none |
sort | desc or asc by value, x by label or date | desc, x for line and area |
limit | Show the top N categories and fold the rest into "Other" | all, up to 60 |
timeUnit | auto, day, week, month, quarter, year, or none to treat dates as labels | auto |
title, xTitle, yTitle | Text for the chart title and axes | built from the field names |
color | Hex colour for a single-series chart | the run's accent colour |
yFormat | A d3 number format for the value axis, e.g. ,.0f, $,.2f, .1% | automatic |
Scatter charts plot raw rows (both fields must be numbers) and never aggregate. Everything else groups rows by x first. Blank x values and non-numeric y values are skipped and counted in the run log, never guessed.
Example output
One row per chart, one row for the report. From the default input:
{"kind": "chart","index": 1,"title": "Revenue by category","chartType": "bar","x": "category","y": "revenue","aggregate": "sum","rowsUsed": 12,"categories": 3,"width": 800,"height": 450,"pngUrl": "https://api.apify.com/v2/key-value-stores/.../records/chart-1.png?signature=...","svgUrl": "https://api.apify.com/v2/key-value-stores/.../records/chart-1.svg?signature=...","caption": "Top: Electrical (12,495). 25,575 in total across 3 categories."}
{"kind": "report","title": "Jobs and revenue, January to May 2026","chartCount": 3,"rowCount": 12,"pdfUrl": "https://api.apify.com/v2/key-value-stores/.../records/report.pdf?signature=...","htmlUrl": "https://api.apify.com/v2/key-value-stores/.../records/report.html?signature=...","aiSummary": null}
The links are signed, so anyone you send them to can open the file without an Apify account. The run summary (CHARTS_REPORT_SUMMARY in the key-value store) repeats every link, the KPIs and any warnings.
What the report contains
- Title and subtitle you set, the generation time and the data source.
- KPIs computed from the charts themselves: row count, totals and averages of the charted values, the top category of each chart.
- Every chart at full width with a one-line caption written from its numbers ("Top: Electrical (12,495). 25,575 in total across 3 categories.").
- Optional plain-English summary of 3 to 6 sentences, written by a model that sees only the KPIs and chart values, never the raw rows, and is told never to invent a number.
- Data preview: the first rows in a table, the charted fields first, up to 7 columns.
The PDF is A4 with page numbers and embeds the same font as the charts. The HTML report is one self-contained file with crisp SVG charts, good for sharing a link, embedding, or printing to PDF from a browser with your own header.
Pricing
Pay per event, nothing else:
| Event | Price | When |
|---|---|---|
| Chart rendered | $0.03 | Once per chart that had data to draw, whatever image formats you chose |
| Report generated | $0.40 | Once per run that produced a report (PDF, HTML or both) |
| Webhook delivery | $0.02 | Only on a confirmed HTTP 2xx from your endpoint |
A chart with nothing to draw (no numeric values, a misspelled field) is a warning in the log and is never charged. Concrete examples:
- A weekly client report, 4 charts plus a PDF: 4 x $0.03 + $0.40 = $0.52 a week, about $2.25 a month.
- A chart in Slack every morning: $0.03 a day, about $0.90 a month.
- Ten charts and an HTML report for a board pack: $0.30 + $0.40 = $0.70.
The optional AI summary also bills the model tokens to your Apify account through Apify's official OpenRouter proxy, about $0.002 per report on the default model (Claude Haiku 4.5); free Apify plans pay 10x the token rate. Platform compute for a typical run is under a cent.
For AI agents
This Actor is agent-ready: pay per event, limited permissions, no standby mode, so agents can discover it through Apify's MCP server and pay via x402 without an Apify account. The input is plain JSON (field names, chart types, a title) and the output is a list of rows with direct URLs to PNG, SVG, PDF and HTML files, which an agent can return to its user or post onward. Use data for rows the agent already holds, datasetId for the output of a previous Actor run, or fileUrl for a file it found.
Limits
- Up to 20 charts per run, 50,000 rows loaded, files up to 100 MB.
- Up to 60 categories per chart (the rest folded into "Other"), 10 series, 5,000 scatter points.
- Chart size 320 to 2,000 px wide, 200 to 1,400 px tall, PNG at 1x to 3x.
- Text renders in DejaVu Sans, which covers Latin, Greek and Cyrillic scripts. Other scripts (for example Chinese or Arabic) are not rendered in the images.
The rest of the toolkit
- Dataset Cleaner & Exporter: dedupe (exact, normalized or fuzzy), flatten nested JSON, clean emails, phones and URLs, then export CSV or Excel.
- Dataset Filter & Transform: keep the rows you want and reshape the fields (dates, replace, split, hash, 25 ops), sort, dedupe, limit.
- Dataset Join & Merge: VLOOKUP-style joins and unions across two datasets, files or Google Sheets on a key field.
- Dataset Aggregate, Group By & Pivot: counts, sums, averages and pivot tables per group.
- Dataset Diff & Change Detector: what was added, removed or changed since last time.
- Dataset AI Enrich: add LLM-generated columns (classify, extract, summarise) to every row, no API key needed.
- Dataset Charts & Report (this one): chart images (PNG, SVG) and a PDF or HTML report from any data.
- Dataset to Postgres, Supabase & MySQL: write the rows straight into a database table, creating it if needed.
- Dataset to REST API: send every row to any API as its own request, with templating and auth presets.
- Actor Pipeline Runner: chain several of these together in one run, each step fed the previous step's dataset.
A common pipeline: a scraper, then Cleaner, then Filter & Transform, then Join to enrich from a sheet, then Aggregate for the weekly summary, with Diff watching what changed and Charts & Report turning the numbers into the Monday PDF. Pipeline Runner runs that whole chain in one call.
FAQ
Does it aggregate my data or do I have to pre-aggregate?
It aggregates inside each chart: rows are grouped by x and the y values summed, counted or averaged as you choose. Feed it raw scraper output directly. If you want the aggregated numbers as a dataset rather than a picture, that is what Dataset Aggregate & Pivot is for; the two chain well.
My dates are strings like "14/03/2026". Will the time axis work?
Yes. ISO dates, Unix timestamps, "March 14, 2026" and day-first "14/03/2026" are all read. Ambiguous slash dates are read month-first, the way a US spreadsheet would. Buckets are chosen from the date span (days, weeks, months or years) unless you set timeUnit.
Can I brand the charts?
Set accentColor for single-series charts, color per chart, and theme light or dark. Multi-series charts use a fixed ten-colour palette chosen to stay distinguishable for colour-blind readers.
Is the summary reliable? It only ever sees the KPIs and the aggregated points the charts already show, with the instruction to use nothing else and never invent a number. Read it before you send it, as you would any summary. It is off by default.
Can I get the raw SVG to edit?
Yes, add svg to the image formats. The SVG is the exact drawing, editable in Figma, Illustrator or Inkscape.
Something did not draw. Why?
The run log names the chart and the reason: a misspelled field (the log lists the fields that do exist), a y field with no numbers in it, or an x field that is blank in every row. Nothing is charged for a chart that did not draw.
Did this save you a spreadsheet session? A short review on this page helps other people find it, and tells me which chart types to improve next.