Documentation menu

Importing leads: presets & consent

Most lead lists start life in another tool: an Apollo search, a Clay table, a HubSpot export. MailInApp recognizes those exports, keeps the columns worth keeping, and asks one question before anything is saved: how did these people agree to hear from you? The answer decides whether they can get your marketing email.

Import a file

Go to Contacts, then create a list from a CSV or use Import CSV on an existing list. An import goes through four steps:

  1. Preview: check the columns. If the file is an export MailInApp knows, a preset card appears here.
  2. Consent: say how these contacts agreed to hear from you.
  3. Verification: every address is checked, and you choose what to drop.
  4. Save.

Consent comes before verification, so if you back out at that step, no addresses have been checked yet.

Apollo, Clay and HubSpot presets

A raw Apollo export has around 50 columns, far more than a contacts list holds. When the preview recognizes an export, it says so ("This looks like an Apollo export") and offers Use Apollo mapping. One click keeps only the useful columns, renamed to the names MailInApp uses everywhere else:

MailInApp columnTypical source columns
emailEmail, Work Email
first_name, last_name, nameFirst Name, Last Name, Full Name
title, seniority, departmentTitle, Job Title, Seniority, Departments
company, company_website, company_industry, company_sizeCompany, Company Name for Emails, Website, Industry, # Employees
linkedin_urlPerson Linkedin Url, LinkedIn Profile
phoneWork Direct Phone, Mobile Phone, Phone Number
city, state, country, locationCity, State, Country, Location
lifecycle_stageLifecycle Stage (HubSpot)

For each row, the first non-empty source column wins, so a blank work phone falls back to the mobile number. If detection guesses wrong, pick another preset, or No preset, under Map columns as. Undo puts the original columns back.

When you use Import CSV to add a recognized export to an existing list, the preset is applied automatically, and a notice says how many columns were mapped and how many were left out.

The provider's own email status

Apollo's Email Status column and HubSpot's unsubscribe and hard-bounce columns aren't imported as columns. The verification step shows them as a summary instead, for example "4,210 verified · 380 guessed · 95 bounced or unavailable · 12 unsubscribed". It offers to also remove the contacts the provider marked as bounced, unavailable or unsubscribed, and that box is ticked by default. This is only a hint: every address still goes through MailInApp's own check.

Every contacts import asks How did these contacts agree to hear from you? Nothing is preselected:

AnswerUse it when
They opted inThey signed up, subscribed or asked for your email.
They're existing customersThey bought from you or have an account with you.
Business card or eventThey gave you their details in person, at an event or a meeting.
Purchased or prospect listThe list was bought, rented or exported from a prospecting tool, and these people never agreed to hear from you.

The answer is saved on each contact in the import, with who gave it and when, and shows on the contact's profile under Consent.

What "Purchased or prospect list" does

Canada's anti-spam law (CASL), Europe's GDPR and similar laws generally require permission before you send someone marketing email. People who never asked for your mail also tend to report it as spam, which hurts delivery for every list you send to.

You can still import these contacts. That's useful for keeping track of prospects, enriching them, or putting them on your pipeline. But campaigns, recurring schedules and journeys skip them, and the send result shows them as skipped (no consent). Transactional email your own app sends through the Send API isn't affected. Sending marketing email to purchased or scraped lists isn't allowed under our Terms of Service.

That answer sticks. Importing the same people again later as "opted in" doesn't lift it. Only the contact can: when they sign up through one of your signup forms, their consent is recorded as opted in from the form.

Contacts added other ways

Contacts added before imports asked this question, and contacts pushed in by an integration, the contacts API, a store sync or an AI connector, have no consent answer on record. They're sent to exactly as before. The profile shows Not recorded for them.

Privacy

The consent answer, like the verification result, is stored on the contact. It's included in your account data export and deleted with the contact.