Skip to main content

Migrate from Better Stack to SolidPing

SolidPing reads your Better Stack account through its public API and converts every monitor and every heartbeat into a check. You paste one API token, SolidPing does the paging. It previews first, so nothing is written until you say so.

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

1. Get an API token​

In Better Stack open Uptime, go to Settings > API tokens and create a token. Read access is enough.

The token is sent once, used as a bearer credential to read /api/v2/monitors and /api/v2/heartbeats, then discarded. SolidPing never writes it to the database, never logs it and never echoes it in an error message. Revoke it in Better Stack when you are done.

2. Preview​

In the SolidPing dashboard open Checks > Import, pick Better Stack (API token), paste the token 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' \
-d '{"token":"YOUR_BETTER_STACK_TOKEN"}' \
'https://your-instance/api/v1/orgs/myorg/checks/import/convert?source=betterstack&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 Better Stack running next to SolidPing until you are ready to cut over.

What maps​

Better StackSolidPing
status, expected_status_codehttp
keywordhttp, body must contain the keyword
keyword_absencehttp, body must not contain the keyword
pingicmp
tcp, udptcp, udp
smtp, pop, imapsmtp, pop3, imap
dnsdns
Heartbeatsheartbeat (period is the expected interval, grace becomes the confirmation period)

Name, frequency, timeout, method, body, expected status codes and required keyword carry over. A paused monitor is imported disabled. Request headers come along, and the ones that look like credentials (Authorization, X-Api-Key...) land in the encrypted secret-headers field.

What you do by hand​

The preview lists all of this as warnings.

  • Heartbeats get new URLs. SolidPing issues its own ping URLs. Copy the new one from each imported heartbeat and repoint the cron job or agent that pushes to it.
  • Playwright monitors. Not converted. Recreate them as SolidPing browser checks.
  • Basic auth credentials. Never imported, on purpose. Re-enter them on the check.
  • IPv4 and IPv6. A Better Stack monitor with no IP version set watches both families. A SolidPing check probes one. Monitors left unset are imported as auto, the preview counts them, and you add a second check pinned to ipv6 where it matters.
  • SSL and domain expiry. These are dedicated ssl and domain checks in SolidPing. Add one per host.
  • Monitor groups, escalation policies, on-call schedules. Rebuild them with SolidPing check groups and on-call.
  • Status history. Results are not portable between tools.

Imported checks carry the label solidping-managed=betterstack, 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-better-stack. If something does not import the way you expect, open an issue with a sample. That sample is most of the work.