Aller au contenu principal

Migrate from UptimeRobot to SolidPing

You do not have to recreate your monitors by hand. SolidPing reads the JSON that UptimeRobot's API returns and turns every monitor into a check. It previews first, so nothing is written until you say so.

Not sure you want to move? Read SolidPing vs UptimeRobot first. It says where UptimeRobot is the better choice too.

1. Export your monitors​

In UptimeRobot, create a read-only API key: My Settings > API Settings > Add Read-Only API Key. Then fetch every monitor:

curl -s -X POST https://api.uptimerobot.com/v2/getMonitors \
-d "api_key=$UPTIMEROBOT_API_KEY" \
-d "format=json" \
-d "alert_contacts=1" \
-d "mwindows=1" \
-d "custom_http_statuses=1" \
-d "custom_http_headers=1" \
> uptimerobot-monitors.json

The last four flags are optional. They only make the warnings in the preview more complete. The key stays on your machine: SolidPing never asks for it, you paste the resulting JSON.

If you have more monitors than fit in one page, repeat the call with offset and concatenate the responses into a JSON array. The importer accepts that shape too.

2. Preview​

In the SolidPing dashboard open Checks > Import, pick UptimeRobot (getMonitors JSON), paste or upload the file and click Import preview. You get the list of checks that would be created and every item that did not map cleanly.

Or use the API with an organization admin token:

curl -s -X POST \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @uptimerobot-monitors.json \
'https://your-instance/api/v1/orgs/myorg/checks/import/convert?source=uptimerobot&dryRun=true'

3. Apply​

Confirm in the dashboard, or drop dryRun=true from the API call. Checks are matched by slug, so running it again updates in place instead of duplicating. You can keep UptimeRobot running next to SolidPing until you are ready to cut over.

What maps​

UptimeRobotSolidPing
HTTP(s)http
Keywordhttp, body must contain the keyword (keyword type "not exists" means must not contain)
Pingicmp
Porttcp. HTTP, HTTPS, FTP, SMTP, POP3 and IMAP sub-types use their standard port
Heartbeatheartbeat

Name, interval and timeout carry over. A paused monitor is imported disabled. Basic HTTP auth is carried into the check's encrypted credential field. This is the one importer that does it, the others drop credentials on purpose.

Intervals below what a SolidPing check type allows are raised to its minimum, and the preview tells you which ones.

What you do by hand​

The preview lists all of this as warnings.

  • Heartbeat monitors get a new URL. Copy the ping URL of the imported check and repoint the job that pushes to it.
  • Alert contacts. They do not carry over. Set up SolidPing integrations and on-call.
  • Maintenance windows and public status pages. Recreate them. SolidPing has its own status pages.
  • Custom HTTP status rules and custom headers. Not imported. The check expects a 2xx.
  • Digest auth. Not imported, re-enter it on the check.
  • Status history. Results are not portable between tools.

Imported checks carry the label solidping-managed=uptimerobot, so you can filter on exactly what the import created.

Full reference​

The complete guide, kept next to the code, is at solidping.io/docs/features/migrate/from-uptimerobot. If something does not import the way you expect, open an issue with a sample. That sample is most of the work.