CSV to CRM · Your App Cloud
Move a contact export into your own CRM
Leaving an old CRM, a newsletter tool or a sign-up form behind? Its CSV holds your contacts in that tool's column names, stages and flags. Decide what each one means in your CRM before the import.
From someone else's field names to a CRM that follows your rules.
Translate the columns, keep the flags that protect people, then rehearse on a small file before the whole list goes in.
01
Map the old tool's columns
If the old tool lets you pick which columns to export, take all of them. You can leave a column behind later, but you can't import one you never exported. In the prompt, pair each column you keep with a field in your CRM, such as Contact Owner with Assigned to.
02
Carry opt-outs and IDs across
Find every column that says a person may not be contacted: unsubscribed, bounced, marketing consent, do not call. Name each one in the prompt as a field to keep, along with the Record ID the old tool gave every contact.
03
Import a sample and deduplicate
Start with twenty rows, including one person listed twice and one unsubscribed contact. Confirm the pair became one contact and the opt-out survived. Then bring in the full export and compare the contact count with the old tool's total, less the pairs you merged.
What the old tool's columns become.
The column names and values below are illustrative samples. Your export will carry its own tool's names, so find the closest column in it and follow that row to the check.
| In the old tool's export | In the new CRM | Before you switch over |
|---|---|---|
| A Record ID or Contact ID column, such as 48213907 | An external ID on each contact, kept beside the CRM's own record | While both tools are in use, this ID is how you find one person in each. Copy three IDs from the old tool, search for them in the CRM and confirm each opens the right contact. |
| Two stage columns: Lifecycle Stage (Subscriber, Lead, Customer) and Lead Status (New, Attempted to contact, Connected) | One stage list in your own words, or a stage plus a separate contact status | List the distinct values in each column and decide whether you keep one or both. A contact reading Customer in one column and New in the other needs a rule for which wins. |
| Internal values in place of labels, such as sales_qualified or a user number under Owner | The labels people actually recognize | Look up the old tool's list that pairs each internal value with its label, and paste it into the prompt. Then check that no contact still shows a raw code. |
| Contact Owner as an email address, such as g.okafor@example.com, including staff who have left | An assigned salesperson who signs in to the CRM | List every owner in the column. Say who takes over contacts owned by former staff, so none sit with someone who can't sign in, and filter by each owner afterward to confirm the split. |
| Unsubscribed, Email Status (Bounced) and Marketing Consent columns, written as TRUE, FALSE or left blank | Contact preference fields on every contact | Count the unsubscribed rows in the file and the unsubscribed contacts in the CRM. If the CRM shows fewer, confirm merged pairs explain the gap before any email goes out. Decide in writing whether a blank consent cell means no. |
| A consent date and source, such as '2025-03-12, webinar sign-up' | A record of when and how each person agreed, kept on the contact | Keep both even if nobody reads them daily. Open a contact with a consent date and confirm it still shows the 2025 date, not the day of the import. |
| Create Date and Last Activity Date | The date each contact was first added, and the date of the last contact with them | Sort contacts by created date. If the oldest one was created this week, the original dates went into the wrong field or weren't mapped at all. |
| Company Name as text, and an Associated Company ID if companies came out as their own export | A company record with its contacts linked to it | Where both files carry the company ID, link on that rather than the name. Open a company with several contacts and count them against the old tool. |
| Dozens of custom fields, many empty or named like lead_src_2 | Only the fields someone fills in or filters by | Count how many rows hold a value in each column. List every column you drop in the prompt, so leaving it out is a decision rather than an accident. |
| A Last Note column holding only the most recent note | The first dated entry on each contact's timeline | Check whether older notes, calls and emails are in the file at all. If they aren't, decide whether to export them on their own or keep the old tool readable for a while. |
What a contact export brings from its old home.
Every CRM, email tool and form builder names things its own way, and the CSV keeps those names, values and gaps. Translating them is your job, and the prompt is where you write that translation down.
Check the export is complete
An export can follow whatever filter or view was open when you clicked it. Compare the file's row count with the total the old tool shows for all contacts, and export again if the two differ.
Find the people who opted out
Check whether unsubscribed and bounced addresses are in this file or kept in a list of their own. If they are separate, export them too. The CRM can only leave out people it knows about.
Match people across two exports
Combining a newsletter list with an old CRM means matching on email address. Compare addresses in lowercase, and never merge on shared inboxes such as info@ or sales@, which stand for several people. Say which tool wins for each field: the email tool for consent, the CRM for owner and stage.
Pick a switch-over day
Contacts keep changing in the old tool while you build. Choose a day after which new contacts go only into the CRM. Just before it, take a final export and import it deliberately, matched on the Record ID.
An illustrative starting point
Your contacts, under your own rules.
Contacts with their original IDs and dates, stages named your way, opt-outs carried across, and one record for each person who was in two tools.
Your stages, not the old tool's
Ask for a pipeline built on the stage list you wrote, with each old value filed under exactly one stage. Then open the Customer stage and compare five of its contacts with how the old tool showed them.
Opt-outs carried over
Ask for the unsubscribed and bounced flags to sit on every contact, whichever file they came from. Open one person who opted out in the main export and one from a separate unsubscribe list, and confirm both carry the flag.
One contact, not three
Someone found in the newsletter list, the old CRM and an expo export can become one contact with each source noted. Ask for a list of likely pairs to approve, then check a merged contact kept both phone numbers.
History with its real dates
Ask for created, last-contact and consent dates to hold the values the old tool recorded, not the import date. Then filter for contacts nobody has reached in a year and decide whether they stay active.
IDs for the final export
Ask for a re-import that matches on the old tool's ID, so the last export before switch-over updates contacts rather than adding them again. Try it first with five contacts from the first import, one with a changed phone number, and check the count holds while that number updates.
Together in your app cloud
The pieces behind the possibility.
Choose the models and services that support the experience you want to create.
Database
Keep data and context for apps and agents
Authentication
Give the right people access
Email
Keep conversations moving
A little more context
Good questions.
What doesn't come across in a contact CSV?
Check the file before you close the old account. A contacts export holds the fields on each contact, but past emails, logged calls, attachments and links to deals may need exports of their own, or may not export at all. Decide which history the CRM needs and keep the rest somewhere you can still read.
How do I combine contacts from two tools without duplicates?
Start with email address, compared in lowercase, and keep shared inboxes such as info@ out of it. That misses anyone who used a work address in one tool and a personal one in the other. Ask for a second list of possible pairs by name and phone, approve each by hand, and check a merged contact keeps notes from both tools.
How do I keep unsubscribed people from being emailed from the new CRM?
Bring every opt-out column across, including any separate list of unsubscribed or bounced addresses. Ask for email to skip those contacts, then test with your own address marked unsubscribed. Check the consent rules that apply where your contacts live before you send anything to the imported list.
Can I keep using the old tool while I set up the CRM?
Yes, but an upload is a snapshot, so changes made in the old tool afterward won't reach the CRM by themselves. Until your switch-over day, update each contact in one tool only, and note anyone added to the old tool after the first import. The final export, matched on the Record ID, brings those people across.
Can the CRM send follow-up email and reminders?
Apps can send email and run tasks on a schedule you set. After switch-over, that could be a note telling each salesperson which imported contacts are now theirs, then a weekly list of follow-ups past their date. Send the handover note to yourself first and check it lists exactly the contacts assigned to you. Keep contacts flagged unsubscribed or bounced out of every message to customers, and have a person check each weekly list before anyone follows it up.
Can an agent point out imported contacts nobody has followed up?
You can add an agent inside the app and run it when asked or on a schedule you set, to list imported contacts with no activity since the move and suggest a next step for each. Compare its list with a filter on last-activity date before trusting it, and let a person decide what happens to each contact. Model usage is metered separately.
Which plan does a CRM moved from a CSV need?
The CRM stores every imported contact in a database, salespeople sign in to update them, and any email it sends has to skip the opt-outs you carried across. Those are backend capabilities, so it is an app with data, and putting it live needs a paid plan. Compare plans on the pricing page before your switch-over day.
If I move again later, can I take the contacts with me?
You can export your app's data and code. Keep the original Record ID on each contact, so a later move can still trace every person back to the tool they first came from. Run a test export once the CRM is in use and check that the external ID and consent date came out with every contact.
Explore Pricing for plans, included capabilities, and usage details.
Keep exploring.
Track leads from every source ↗
See the outcome and the capabilities behind it.
Six rows that break an import ↗
A sample customer file where a comma in a name, an accent, a leading zero and a date each go wrong, with the check that catches each one.
Understand data and context ↗
Give information the right place in your app.
Prepare to publish ↗
Check the experience you will share.
Your ideas, up and running
Your next idea has a home.
Build an app. Run an agent. Make it yours.
Start building