# Move from Better Stack to up4

> Match Better Stack’s terms to up4’s, bring your monitors over with the CSV import, see what does not carry over and run both tools side by side before you switch alerts.

Source: https://upfour.io/docs/moving/better-stack

You will have your Better Stack monitors running in up4 while Better Stack keeps running, so you can compare both before you switch your alerts.

- **Who:** Anyone who can create monitors in your Company
- **Time:** One sitting, then 48 to 72 hours side by side

You need a Better Stack API token with read access and the people or channels that should receive alerts. In that one sitting you move a first batch.

## Match Better Stack’s words to up4’s

| Better Stack | up4 | What to know |
| --- | --- | --- |
| Monitor | **Monitors** | up4 has HTTP, ping, TCP and DNS checks. Better Stack’s UDP, SMTP, POP, IMAP and Playwright monitors have no counterpart. |
| Heartbeat | **Scheduled jobs** | Your job checks in with up4 at a URL. |
| Escalation policy | **Alert plans** | Who is told, in which order, after which wait. |
| On-call calendar | **On-call rotations** | Built again in up4. |
| Integration (Slack, Microsoft Teams, Zapier, webhooks) | **Alert channels** | You connect each one again. |
| Status page | **Status pages** | You build it again in up4. |
| Incident | **Incidents** | up4 opens its own incidents from its own checks. |

## Export your monitors and import them

Better Stack’s documentation describes importing monitors into Better Stack. We found no export of the monitor list in the dashboard documentation. The documented route out is the [Monitors API](https://betterstack.com/docs/uptime/api/list-all-existing-monitors): **GET /api/v2/monitors** with a Bearer token, returned in pages. Turn that response into a CSV file.

**In up4:** Monitoring › Paste many URLs · [Open in up4](https://app.upfour.io/monitors/new/batch)

## Steps

### 1. List your monitors through the API

Follow the pages of the response until its next link is empty. Keep the name, address, check frequency, required keyword and regions of each monitor.

### 2. Write the CSV file with up4’s column names

Named like this, the columns are recognized without any mapping. Better Stack’s check frequency is in seconds, which up4 accepts as it is.

```
pronounceable_name    →  name
url                   →  url
check_frequency       →  interval
required_keyword      →  keyword
regions (us, eu, as, au)  →  regions (eu|us|asia|au)
```

Do not name a column **pronounceable_name**: in up4 that name sets the **Spoken name**, not the display name. Do not keep Better Stack’s **monitor_type** column either. Its values differ from up4’s, so set it to **Ignore this column**.

### 3. Open Import websites

Choose **Choose CSV file** or paste the file. up4 accepts up to 500 rows and 2 MB at a time. Under **Map columns**, every column needs a field or **Ignore this column**.

### 4. Choose Preview import, then create

The preview creates nothing. Read each row, fix or exclude errors, and tick **Create paused for setup review** if you want to look first.

## How you know it worked

**View imported monitors** lists exactly the monitors you created. A monitor reads as pending until its first check result arrives.

## See what does not carry over

- **History.** Check results, uptime figures and incidents stay in Better Stack. up4 starts measuring with its first check.
- **Escalation policies and on-call calendars.** Create an **Alert plans** entry and an **On-call rotations** entry in up4, then assign them to the monitors.
- **Integrations.** Connect each channel once in up4\. The import only assigns channels that already exist.
- **Heartbeats.** The import creates monitors only. Create each **Scheduled jobs** entry and swap the URL in your job. Both services accept **/fail** at the end of the URL to report a failed run; up4 also accepts an exit code there.
```
https://incidents.betterstack.com/api/v1/heartbeat/<token>
https://app.upfour.io/v1/heartbeat/<slug>
```
- **Status pages.** Build them again.

## What up4 does not do here

up4 does not read your Better Stack account and has no one-click migration. You bring the file; up4 shows a preview before it creates anything.

## Expect these differences

- **Confirmation.** up4 does not alert on one failed check. A change of state needs 3 consistent observations: the first differing check plus 2 instant re-checks. Read your Better Stack settings before you compare alert timing.
- **Job timing.** Better Stack’s “Expect a heartbeat every” and “grace period” become **Expect a check-in every** and **with a grace period of**.
- **Regions.** Better Stack names its Asia region **as**; up4 writes **asia** in a CSV file.
- **Price per check.** Every check type costs €9 per million checks. One monitor checked every minute from one region comes to €0.39 a month. Each extra region repeats the checks. See [What costs money](https://upfour.io/docs/how/what-costs-money.md).

## Run both tools side by side

1. Pilot three to five websites that matter, with one alert channel.
2. Leave Better Stack running. 48 to 72 hours is a rule of thumb, not a requirement.
3. Import the rest of your list.
4. Send a test alert per channel and confirm it arrived. Then turn off the alerts in Better Stack.

The [switching overview](https://upfour.io/switch) has the same plan in short.

## Take your monitors back out

Open **Monitor tools** in the monitor list and choose **Export monitors (CSV)**. The file imports again into this or another up4 account. Passwords, request headers and proxy settings are not included. For Better Stack, use the import described in its documentation, which takes one URL per line.

## If something is off

- The preview button stays disabled: every column must be mapped or set to **Ignore this column**, and each field only once.
- A region shows as unavailable: it has no healthy checker right now. Choose another region.
- More fixes are in [the import guide](https://upfour.io/docs/import#troubleshooting).
