# Bring your own lead list and mailboxes

> Run outbound from leads and mailboxes you own: import a CSV, keep verification results, connect Google, Microsoft or SMTP mailboxes, and check the list.

Source: https://docs.ayinbox.com/learn/bring-your-own-leads-and-mailboxes/

AY Inbox works from the lead list you built and the mailboxes you already own. You import your list, connect your Google, Microsoft or any IMAP/SMTP mailboxes, and AY Inbox sends from them, syncs replies back, and checks the list before a campaign starts. Buying leads or mailboxes through AY Inbox is never required.

"Bring your own" means two things here. Your **lead list** is the set of people you want to email, with whatever fields you collected about them. Your **mailboxes** are the sender accounts mail goes out from: every warmup message and campaign email is sent through a mailbox you connected, under your own domain.

Importing a list [#importing-a-list]

Start from **Contacts** and import a file:

1. **Upload** a CSV, TSV or XLSX file of up to 50 MB and 50,000 rows. A CSV may use commas or semicolons. Nothing is written yet.
2. **Map columns.** One column must map to **Email**. Map the rest to name, company, phone, **Subscribed**, **Labels**, or any custom field. A file with the same headers as one you imported before maps itself the way you confirmed last time.
3. **Review** the counts: new contacts, ones you already have, merged repeats and rows that cannot be imported. Choose **Leave as is** or **Update details** for existing contacts, and add everyone to segments, labels or a campaign.
4. **Import.** It runs on the server in chunks, so you can close the window.

A few things make re-importing safe. One address is one contact, matched on the lowercased email. A blank cell never erases a value you already hold. Failed rows come back as a file with the reason in the last column, ready to fix and import again.

**Custom fields carry your research.** Map any column to an existing custom field or create one, and it is usable in copy straight away: a column mapped to `industry` becomes `{{.industry}}` in an email. See [personalization](/guides/expressions/).

**Consent travels too.** If you write to countries on the workspace's [prior consent](/guides/contacts-crm/#prior-consent) list, map a column to **Consent given**. A date records when consent was given, `yes` records it as of the import, and `no` or `withdrawn` clears it.

The import wizard, Google Sheets sync sources and every mapping option are in [contacts and CRM](/guides/contacts-crm/).

Keep the verification you paid for [#keep-the-verification-you-paid-for]

If your list already went through a verification service, keep its verdicts. During mapping, a column whose header or values look like a verification service's results is recognised and offered as **Verification status**. Those verdicts are stored as imported, and the background check leaves those contacts alone.

Contacts without a verdict are checked in the background within about a minute of being added. Campaigns never send to an address marked `invalid`, and send to `risky` only when the campaign allows risky addresses. See [address verification](/guides/deliverability/#address-verification).

The launch check [#the-launch-check]

Importing does not judge the quality of your list. The list is judged when you launch a campaign with it, which is where a bad list would cost you:

| Projected bounce rate | What happens                                               |
| --------------------- | ---------------------------------------------------------- |
| Below `2%`            | The campaign launches                                      |
| `2%` to `4%`          | It launches with a warning                                 |
| Above `4%`            | Launch is refused, with the number and what to do about it |

The projection counts only addresses verification actually rejected, among leads that would really be sent to (suppressed and unsubscribed leads are skipped). Lists under 50 leads are never refused. A refused launch offers **Launch anyway** for a list you verified with another service. See [the launch check on your list](/guides/campaigns/#the-launch-check-on-your-list).

Connecting mailboxes [#connecting-mailboxes]

Open **Accounts** and choose **Add account**:

| Provider         | How it connects                                                                                                                            |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Google Workspace | An administrator's grant connects every mailbox on the domain, with no password per mailbox. An app password over IMAP and SMTP also works |
| Gmail (personal) | An app password over IMAP and SMTP, or Sign in with Google where the deployment offers it                                                  |
| Microsoft 365    | An administrator's grant connects every licensed mailbox in the organization. One mailbox can sign in on its own                           |
| Outlook.com      | Microsoft sign-in                                                                                                                          |
| Any other server | IMAP and SMTP with a password: Yahoo, Fastmail, Zoho, cPanel hosting, a self-hosted server and so on                                       |

For many mailboxes at once, **Import mailboxes** takes up to 5,000 from a CSV, TSV or XLSX file or a pasted `address:password` list. Only an address and a password are required: servers, ports and encryption are worked out for you. Failed rows are grouped by cause and can be fixed and retried for 7 days. If you bought mailboxes from an inbox vendor, **Inbox vendor** reads them straight from the vendor with an API key. See [import mailboxes](/guides/mailbox-import/).

On a self-hosted instance the whole-domain grants stay switched off until the operator sets them up; see [whole-domain mailbox connects](/development/whole-domain-connect/). The full provider table, scopes and reconnection steps are in [mailboxes](/guides/mailboxes/).

Mailboxes you already warmed [#mailboxes-you-already-warmed]

Keep warmup running on mailboxes that also run campaigns; it is designed to continue alongside cold sending, at a reduced volume while a campaign is live.

A mailbox that warmed with AY Inbox does not jump straight to its full cold cap. It starts cold sending at `5` a day and rises by at most `5` per clean day, and only as fast as confirmed human replies from real recipients allow. A mailbox that never used warmup is not held to that ceiling. The campaign's **Today's sending plan** shows when this is what limits a mailbox. See [easing out of warmup](/guides/campaigns/#easing-out-of-warmup).

Finding more leads when you need them [#finding-more-leads-when-you-need-them]

Lead sourcing is optional, and each source adds contacts the same way an import does:

* **[Looot lead jobs](/guides/looot-leads/)** take company domains and job titles, find people there, verify each address and add only the deliverable ones, inside a budget you set. The operator has to turn them on.
* **[Apollo](/guides/apollo/)** imports saved lists with your own Apollo API key and keeps them in sync.
* **[Clay](/guides/clay/)** sends enriched rows into your contacts.

Doing it by API or CLI [#doing-it-by-api-or-cli]

Everything above is reachable without the dashboard:

* `POST /contacts` takes a JSON array of contacts, including a `verification_status` you already hold and the `verification_provider` it came from.
* `POST /contacts/import/preview` returns the detected columns and a sample, and `POST /contacts/import/commit` imports the file with your mapping.
* For large files, `POST /contacts/imports` uploads the file as a draft, `POST /contacts/imports/:id/start` queues it, and `GET /contacts/imports/:id` reports its progress.

The CLI wraps the same calls: `ayinbox contact import-preview`, `ayinbox contact import`, `ayinbox contact imports`, `ayinbox contact import-start` and `ayinbox contact import-status`. Mailbox imports carry passwords, so they currently take a signed-in session, not an API key.

Field-level detail is in the [contacts API reference](/api/reference/contacts/).

## Frequently asked questions

### Can I use my own lead list with AY Inbox?

Yes. Import a CSV, TSV or XLSX file of up to 50 MB and 50,000 rows, or send contacts as JSON through the API. Any column can be mapped into a custom field for personalization.

### Will AY Inbox re-verify a list I already verified with another service?

No. Map the other service's result column to Verification status and those verdicts are kept as imported. The background check skips contacts that already have one.

### Can I keep using mailboxes I already warmed elsewhere?

Yes. Connect them like any other mailbox. A mailbox that never used AY Inbox warmup is not held to the ramp that eases a mailbox out of warmup, though its daily campaign limit still applies, and warmup here stays optional.

### Does AY Inbox stop a campaign with a bad lead list?

On lists of 50 or more deliverable leads, launch is refused above a 4% projected bounce rate and warns between 2% and 4%, counting only addresses verification rejected. Launch anyway overrides it for a list you verified elsewhere.

### Do I need to buy leads to use AY Inbox?

No. Lead sourcing is optional. If you want more leads, a Looot lead job (when the operator turns it on), Apollo with your own API key, or a Clay table can add them to your contacts.
