Export and Import Monitors as CSV
Until now, the only way to move fifty monitors into PingZen was to create fifty monitors by hand. And the only way to back up your monitoring config was… well, there wasn’t one.
Both problems are now solved with two API endpoints and two MCP tools.
Export: your whole config in one file
GET /api/v1/monitors/export/csvOne request downloads every monitor you have — across all your workspaces — as a regular CSV file that opens in Excel, Google Sheets, or LibreOffice. Want just one workspace? Add ?workspace_id=<id>.
The file contains the full configuration: URL, protocol, check interval, timeouts, retry settings, keyword assertions, DNS expectations, SSL thresholds — every setting of every protocol we support. Each row also carries a workspace column with the workspace name, so the file stays meaningful outside your account.
Two things intentionally never leave the system:
- Secrets. Passwords, tokens, and proxy credentials are excluded at the column level. A CSV file gets forwarded, attached, and uploaded — your credentials shouldn’t travel with it. (StatusCake does the same with its exports, and we think that’s the only sane default.)
- Formulas. Cell values that could execute as spreadsheet formulas (
=,+,-,@prefixes) are neutralized, so opening the file in Excel is safe even if a monitor name tries to be clever.
Import: from any spreadsheet — or a competitor
POST /api/v1/monitors/import/csvUpload a CSV and get monitors. The obvious use is restoring your own export, but the parser is deliberately liberal about what it accepts:
- Our export format — round-trips losslessly.
- UptimeRobot bulk-upload files —
Type,Friendly Name,URL/IP,Interval,Keyword Value,Portcolumns are understood as-is.Pingbecomes ICMP,Portbecomes TCP with the port appended to the host,Keywordbecomes an HTTP check with a keyword assertion. - StatusCake exports — including their semicolon-delimited format and
WebsiteName/WebsiteURL/CheckRate/FindStringcolumns. - A file you typed by hand — the only required column is
url. Name defaults to the hostname, protocol to the URL scheme, everything else to sensible defaults.
Nothing is created until you say so
Add ?dry_run=true and the endpoint validates every row and reports what would happen — created, skipped, failed, and why — without touching your account. Run it, read the report, then repeat without the flag.
One bad row never kills the batch
The import is per-row by design. Row 17 has a typo in the URL? You get an error entry for row 17 with the exact validation message — and the other 499 rows still import. Monitors that already exist (same URL and protocol in the target workspace) are skipped by default, so re-importing a backup is idempotent. Prefer duplicates? ?on_duplicate=create.
Every created monitor goes through exactly the same pipeline as one created by hand: the same validation, the same SSRF protection, the same plan limits, and an immediate first health check.
For AI agents: two new MCP tools
The same feature ships in our MCP server (v0.17.0) as export_monitors_csv and import_monitors_csv, so an LLM agent connected to PingZen can back up and migrate monitoring configs conversationally — “export my production workspace”, “import these 30 sites from this spreadsheet”.
One safety detail we care about: for agents, dry-run is the default. An agent that calls import_monitors_csv without explicitly setting dry_run: false gets a preview report, not a write. The agent shows you what would happen; the real import only runs after it deliberately asks for it.
Migrating from UptimeRobot in two steps
- In UptimeRobot, export your monitors to CSV.
POSTthat file to/api/v1/monitors/import/csv?dry_run=true, check the report, then run it again withoutdry_run.
No column renaming, no reformatting. The same works for StatusCake and HetrixTools files.
Limits and details
- Up to 500 rows / 1 MB per import request.
- The exported file is UTF-8 with BOM — Excel opens non-Latin monitor names correctly.
- Both
,and;delimiters are auto-detected. - List values (DNS expectations, custom DNSBL servers) can be JSON or simply semicolon-separated; HTTP headers are a JSON object in a cell.
- Works with JWT or an API key, like the rest of the monitors API.
The full column reference is one request away: export your monitors and look at the header row — the export format is the import format.