# Move from Cronitor to up4

> Match Cronitor’s terms to up4’s, bring your website checks over with the CSV import, recreate jobs and heartbeats as scheduled jobs and run both tools side by side before you switch alerts.

Source: https://upfour.io/docs/moving/cronitor

You will have your Cronitor website checks and your jobs running in up4 while Cronitor keeps running, so you can compare both before you switch your alerts.

- **Who:** Anyone who can create monitors and scheduled jobs
- **Time:** One sitting, then 48 to 72 hours side by side

You need a Cronitor API key that can read monitors, access to the code or crontab that calls your jobs’ ping URLs, and the people or channels that should receive alerts. In that one sitting you move a first batch.

## Match Cronitor’s words to up4’s

| Cronitor | up4 | What to know |
| --- | --- | --- |
| Check monitor (website, HTTP, TCP) | **Monitors** | up4 has HTTP, ping, TCP and DNS checks. Cronitor’s UDP and browser checks have no counterpart. |
| Job and heartbeat monitor | **Scheduled jobs** | Your job checks in with up4 at a URL. See below. |
| Site monitor | **Not available** | Cronitor’s site monitors cover web analytics. up4 has no counterpart. |
| Notification list or integration | **Alert channels** | You connect each one again. |
| Environment | **Not available** | up4 has no environments. Create one scheduled job per environment. |

## Export your checks and import them

The [Cronitor Monitor API](https://cronitor.io/docs/monitor-api) lists your monitors with **GET /api/monitors**. You sign in with HTTP basic auth: the API key is the user name and the password stays empty. We found no export of the monitor list in Cronitor’s documentation, so turn the response into a CSV file. This step covers the website checks. Jobs and heartbeats follow in the next section.

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

## Steps

### 1. List your check monitors through the API

Filter by type check and follow the pages. Keep the name, the request URL, the platform, the schedule and the paused flag of each monitor.

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

Named like this, the columns are recognized without any mapping. Cronitor writes a schedule as text, such as every 2 minutes. Write the same length with a unit.

```
name                 →  name
request.url          →  url
platform (http, tcp) →  monitor_type   (http or tcp)
schedule             →  interval       (every 2 minutes → 2m)
paused               →  state          (PAUSED, otherwise empty)
```

A TCP row needs **TCP host** and **TCP port** columns instead of a URL. Leave out UDP and browser checks.

### 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.

## Move jobs and heartbeats

The import creates website checks only. Create each job and heartbeat by hand as a **Scheduled jobs** entry. Cronitor’s settings fit up4’s like this.

| Cronitor | up4 | What to know |
| --- | --- | --- |
| Interval schedule, such as every 5 minutes | **Expect a check-in every** | Pick the same length and unit. |
| Cron expression or time of day | **Expect a check-in every** | up4 has no cron expressions. Choose the time between runs, for example one day for a nightly job. If the job skips days, choose an interval that covers the longest gap. |
| Grace seconds | **with a grace period of** | The extra time before silence counts as missed. The default is about a fifth of the daily cadence. |

## Steps

### 1. Create the scheduled job

Open **Scheduled jobs**, add a new job, name it and set the interval and the grace period. The minimum interval is 30 seconds.

### 2. Swap the URL in your job

Replace the Cronitor telemetry call with the ping URL of the new job. up4 accepts GET, POST and HEAD. Add **/fail**, or an exit code from 1 to 255, to report a failed run; 0 is a success.

```
https://cronitor.link/p/<apiKey>/<monitorKey>?state=complete
https://app.upfour.io/v1/heartbeat/<slug>
https://app.upfour.io/v1/heartbeat/<slug>/fail
```

up4 has no start signal. Every request counts as a check-in, so send one when the job finishes and drop the call that reports the start. Where Cronitor takes a status code, up4 takes the exit code at the end of the URL.

### 3. Send the first check-in

up4 does not alert before a job has checked in once. Run the job or call the URL by hand after you create it.

## See what does not carry over

- **History.** Check results, run history and incidents stay in Cronitor. up4 starts measuring with its first check or check-in.
- **Notifications.** Connect each list or integration once as an **Alert channels** entry. The import only assigns channels that already exist.
- **Assertions and request details.** Cronitor’s assertions, headers and bodies are not read. Set what you need on each monitor after the import.
- **Telemetry and run states.** up4 stores check-ins, not run, complete or tick states.
- **Site monitors and environments.** There is no counterpart.

## What up4 does not do here

up4 does not read your Cronitor 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 Cronitor failure tolerance before you compare alert timing.
- **Unknown ping URLs.** In Cronitor a call for an unknown monitor key creates a monitor. In up4 the job must exist first, because its URL comes with it.
- **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. Accepted check-ins from jobs cost €3 per million. See [What costs money](https://upfour.io/docs/how/what-costs-money.md).

## Run both tools side by side

1. Pilot three to five checks and one job that matter, with one alert channel.
2. Leave Cronitor running. For a job, call both URLs from the same script. 48 to 72 hours is a rule of thumb, not a requirement.
3. Import the rest of your list and recreate the other jobs.
4. Send a test alert per channel and confirm it arrived. Then turn off the alerts in Cronitor.

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. Scheduled jobs are not part of that file: note each name, interval and grace period before you leave.

## 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 row reports a problem with the interval: write whole seconds or a unit such as 60s, 5m or 1h.
- A job never alerts although it is silent: it has not checked in yet. Call its URL once.
- More fixes are in [Troubleshooting](https://upfour.io/docs/troubleshooting.md).
