---
title: "Company and subscriber import"
label: "Companies & subscribers"
description: "Import companies via CSV or XML, import job alert subscribers via CSV, and export subscriber data for backup or use in other tools."
publishedAt: 2026-02-10
updatedAt: 2026-11-07
order: 3
status: "published"
faqs:
  - question: What columns are required for a company import?
    answer: "Only the 'name' field is required. Optional fields are website, summary, description, logo, linkedinUrl, xUrl, and facebookUrl. AI column mapping can match common alternate headers on CSV and XML uploads. Cavuno imports every mapped row, so pre-filter any rows you do not want to import."
  - question: Can I import companies from XML?
    answer: "Yes. Under Companies → Import, upload a .csv or .xml file. Cavuno maps fields the same way as job import and skips companies whose website domain already exists on your board."
  - question: What happens if a company with the same website already exists?
    answer: "Cavuno first matches by normalized website domain, then by normalized company name. An existing match is adopted into the board without overwriting its profile. Duplicate rows within an import are also deduplicated."
  - question: Do imported subscribers need to confirm?
    answer: "Yes. Each imported person who hasn't confirmed stays Pending confirmation until they confirm their existing sign-up, and their alerts start once they do. Subscribers who already confirmed stay as they are."
  - question: What format should the CSV file use?
    answer: "Use a standard CSV file with a header row, comma-separated values, and UTF-8 encoding. Quoted values and escaped quotes are supported. Files with a BOM are handled automatically."
  - question: Can I import jobs via CSV or XML?
    answer: "Yes. Use Jobs → Import. See [Import jobs from CSV or XML](/docs/import-export/job-import) and [Recurring XML feeds](/docs/import-export/recurring-xml-feeds)."
---

This guide covers imports for **companies** (CSV or XML) and **job alert subscribers** (CSV), plus subscriber CSV export. **Job imports use a separate flow**. See [Import jobs from CSV or XML](/docs/import-export/job-import) and [Recurring XML feeds](/docs/import-export/recurring-xml-feeds). This is the fastest way to migrate company and subscriber data from another platform or manage it in bulk.

## Before you begin

Create a small representative file before uploading the complete dataset. For companies, include rows that exercise optional URLs and one existing company you expect Cavuno to match. For subscribers, confirm that you have permission to send job alerts to every imported address and retain the consent records your organization requires.

## Import companies

Add employer profiles in bulk by uploading a CSV or XML file. This is useful when migrating from another job board or seeding a new board with companies.

### Prepare your CSV

Upload the export from your old email tool as it is, such as a Mailchimp, Kit or Substack export. Cavuno matches its columns to these fields, and you can change any match before you import:

| Field | Required | What it reads |
|---|---|---|
| Email | Yes | The subscriber's email address, from a column such as `Email Address` or `email` |
| Sign-up date | No | When the person signed up, from a column such as `OPTIN_TIME` or `created_at` |
| Status | No | Whether the person is still subscribed, from a column such as `status` or `UNSUB_TIME`. Rows marked unsubscribed, bounced, cleaned or complained are skipped |

Columns set to **Ignore**, such as names and tags, are not imported. Every imported subscriber receives a weekly alert.

### Example CSV

```csv
Email Address,OPTIN_TIME,Status
jane@example.com,2026-03-14 09:12:40,subscribed
bob@example.com,2025-11-02 17:40:03,subscribed
```

### Upload the file

1. Go to **Email subscribers** in the sidebar.
2. Click **Import**.
3. Select your `.csv` file.
4. Check the matched columns, and confirm these people signed up for job alerts from your board.
5. Click **Import subscribers** to start.

Your confirmation is kept as the consent record for the import. When the import finishes, a message shows how many people were added and how many were skipped, and why.

Imported people show as **Pending confirmation**. Each one gets one email over the next few days asking them to confirm their existing sign-up, newest sign-ups first, and their alerts start once they confirm. Anyone who hasn't confirmed 60 days after that email shows as **Unsubscribed** and isn't emailed again. Subscribers who already confirmed are left as they are. Pending people don't count toward your Email subscribers allowance until they confirm.

Filter the Email subscribers table by **Status** to see who is still pending, or choose **Summary** from the **...** menu for a count of each status.

## Export job alert subscribers

Download your full subscriber list as a CSV for backup, analysis, or import into other tools. Subscribers are one of the eight tables you can export. Every primary table (jobs, companies, employers, candidates, subscribers, blog posts, authors, and tags) exports the same way, from the **...** menu in its toolbar. See [Export your data](/docs/import-export/data-export) for the full list, the large-export flow, permissions, and the API endpoints.

1. Go to **Email subscribers** in the sidebar.
2. Open the **...** menu in the toolbar and choose **Export**.
3. Your browser downloads `subscribers-{board-slug}.csv`.

### Exported columns

| Column | Description |
|---|---|
| `subscription_id` | Unique identifier |
| `email` | Subscriber email address |
| `status` | The status shown in the Email subscribers table: `active`, `pending`, `waitlisted`, or `unsubscribed` |
| `confirmed` | Whether the subscriber confirmed their email |
| `is_active` | Whether the subscription is active |
| `confirmed_at` | Timestamp of email confirmation |
| `unsubscribed_at` | Timestamp of unsubscribe (empty if still subscribed) |
| `last_digest_sent_at` | When the last job alerts or job matches email was sent |
| `preferences` | Each job alert and job matches subscription, with its frequency |
| `created_at` | When the subscription was created |
| `updated_at` | When the subscription was last modified |

The export includes everyone in the Email subscribers table, whatever their status, including job seekers with an account who get job alerts or job matches.

## File format requirements

- **Format:** Standard CSV with comma delimiters.
- **Encoding:** UTF-8 (files with a BOM are handled automatically).
- **Header row:** The first row must contain column names.
- **Quoting:** Wrap values containing commas or quotes in double quotes. Escape literal quotes by doubling them (`""`).
- **Extension:** `.csv`.

## Troubleshooting

Before troubleshooting, verify the import result. For companies, compare the imported, matched, and skipped counts and open representative profiles to check mapped fields. For subscribers, check the added and skipped counts in the message the import shows when it finishes, and that new rows show **Pending confirmation** with a weekly preference. For an export, open the downloaded CSV and confirm active and inactive statuses are both present when expected.

### Company import skips rows

- **Missing name:** Every row needs a `name` value.
- **Unexpected rows imported:** Cavuno does not use `is_published` as a filter. Remove draft, archived, or otherwise unwanted rows before uploading.
- **Existing company matched:** Cavuno matches by normalized website domain and then normalized name. It adopts an existing match without overwriting that profile.
- **Logo download failed:** The company is still created without a logo. Check that the `logo_url` points to a publicly accessible image.

### Subscriber import skips rows

- **Invalid email:** Emails that fail validation, and addresses at a misspelled domain such as `gamil.com`, are skipped.
- **Role address:** Shared addresses such as `admin@`, `info@`, `support@` and `noreply@` are skipped.
- **Duplicate:** An address that appears again further down the file is imported once.
- **Status:** Rows whose status column marks them unsubscribed, bounced, cleaned or complained are skipped. Check that the **Status** field is matched to the right column.
- **Already unsubscribed:** People who unsubscribed from your board are skipped. An import does not resubscribe them.

### General issues

- **Wrong file type:** Company import accepts `.csv` and `.xml`. Subscriber import accepts `.csv` only. Convert `.xlsx` or `.tsv` files to CSV first.
- **Encoding errors:** Save as UTF-8. Some spreadsheet applications default to other encodings.
- **Empty file:** The file must contain at least a header row and one data row.
