How to Import and Clean a LinkedIn Lead CSV

    reachium-linkedin-csv-lead-import-cleaning-thumbnail.png

    A lead CSV from Apollo, ZoomInfo, Clay, a CRM or LinkedIn itself imports cleanly once one thing is right: the profile URL column. Find it by its values rather than its header, map the names and job titles, set aside the rows that cannot be reached on LinkedIn, and import in batches of 500. Twenty minutes for a few thousand rows.

    Run it when: the leads already exist somewhere else and you are not going to rebuild them here.

    Time: 20 minutes for a few thousand rows.

    Depends on: SOP 04, How to Generate B2B Leads on LinkedIn. Reachium's own scrapes land clean and never need this.

    Last reviewed September 2026.




    Before you import


    The CSV exported and openable

    The row count, so you can reconcile afterwards

    A lead list created, or a decision to add to an existing one




    How to import and clean a LinkedIn lead CSV


    1. Find the profile URL column by its values, not its header.

    This is the single thing that goes wrong most. Every source names it differently, and some ship two columns that look alike. The right column is the one whose values look like linkedin.com/in/..., whatever the header calls it. A profile URL is required on every row; without it the row cannot be imported at all.


    2. Map the rest of the columns by meaning.


    Source

    Profile URL column

    Watch out for

    LinkedIn Connections export

    URL

    Older exports have no job title and no phone

    Sales Navigator via Evaboot

    LinkedIn Url or Profile Url

    Email only present if enriched

    Sales Navigator via PhantomBuster

    defaultProfileUrl or linkedinProfileUrl

    profileUrl is often a sales/lead URL and will be skipped

    Apollo

    Person Linkedin Url

    Company Linkedin Url is a company page and will be skipped

    ZoomInfo

    LinkedIn Contact Profile URL

    Two phone columns, pick one

    Clay or a CRM

    whichever column holds /in/ values

    Headers are whatever someone typed


    The fields that carry over are profile URL, first and last name, email, company name, job title and phone. Everything else in the file is dropped, which is fine.


    3. Split full names.

    If the source has one name column, split on the first space: first token to first name, the rest to last name. Compound surnames and single-name profiles come out approximate, so expect a handful to need fixing later. At least one of first or last name must be present or the row is skipped.


    4. Set aside the rows that cannot be imported.

    Company page URLs, Sales Navigator lead URLs, and rows with an email but no profile URL. That last group is worth keeping in a separate file rather than quietly binning it: those people are real, they just need a profile URL before they can be reached on LinkedIn.


    5. Do not bother normalizing URL formatting.

    http versus https, a www or country subdomain, a trailing slash, tracking parameters on the end: all handled on import. Time spent tidying these is time wasted. Only the /in/ shape matters.


    6. Import in batches of 500.

    Three thousand leads is six batches, ten thousand is twenty.


    Re-sending a batch is safe: Reachium keys every row on the profile URL, so a retry after a lost response cannot duplicate anyone. No credits are charged; this is your own data.


    7. Reconcile the count.

    Compare the list total against the number of rows you sent. The difference is the skipped rows, and the response says which and why. Never report a list as fully imported without checking this. A 4,000-row file that landed 2,600 leads usually means the wrong URL column was mapped.


    8. Know when to use the app instead.

    Beyond roughly 10,000 rows, the importer in the app is built for the job and will be faster and safer than cleaning the file in a conversation.


    9. Fix stragglers individually.

    One lead with a typo'd company or a mangled name gets corrected in place. Do not re-import the whole file to fix six rows.




    CSV imports: do this, not this


    Do this

    Not this

    Identify the URL column by its values

    Trust a header called "LinkedIn"

    Apollo's Person Linkedin Url

    Apollo's Company Linkedin Url

    Reconcile list total against rows sent

    Announce "all imported"

    Keep the no-URL rows in a side file

    Delete them silently

    Batches of 500

    One call with 4,000 rows

    Name the list after the ICP

    Name it after the file

    Use the app importer past 10,000 rows

    Grind through 40 batches




    Questions people ask


    How do I clean LinkedIn job titles for outreach?

    LinkedIn job titles arrive as people wrote them: "CEO | Founder | Keynote Speaker | Dad". If the title goes into a merge tag, keep only the part before the first separator, strip emojis, and write copy that still reads if the field is empty. A message opening "as a CEO | Founder | Dad" is worse than one that never used the tag.


    Which column in my CSV is the LinkedIn profile URL?

    The one whose values look like linkedin.com/in/..., whatever the header says. Apollo's Person Linkedin Url, not Company Linkedin Url. PhantomBuster's defaultProfileUrl, not profileUrl. Mapping the wrong column is the single most common import failure.


    Does importing a CSV cost credits?

    No. It is your own data, so no credits are charged. Re-sending a batch is also safe: every row is keyed on the profile URL, so a retry after a lost response cannot duplicate anyone.


    What happens to rows without a profile URL?

    They are skipped, and they should be kept in a side file rather than binned. Those people are real; they just need a profile URL before they can be reached on LinkedIn. Always reconcile the list total against the rows you sent.


    You are done when


    Every row mapped to profile URL, name, and whatever optional fields exist

    Rows without a valid /in/ URL identified and set aside, not lost

    All batches sent and the list total reconciled against the input count

    Skipped-row count and reason known and reported

    List named after the ICP, ready for a campaign



    Have our team do it for you. We build the lists, write the copy, run the campaigns and work the inbox. Book a call


    Already a customer. Stuck on something? Book a support call




    Powered by reachium.io