Setup Your Outreach

Importing Target Websites

Bring websites into contactID by paste, CSV, or file upload, check them for contact forms, and see exactly what is ready to send.

Websites go in on the Targets tab. contactID checks each one, finds its contact form, and queues it for sending.

1. Paste Or Drop

Paste addresses one per line into the box (with or without https://), or drop a CSV, TXT or Excel file. The URL column is detected automatically; extra columns become message tags ({{city}}, {{owner_name}}) shown under “Columns we found”. The One I wrote per site option uses a message column from your file for each website. A column named Message (or Custom message, Body, Pitch) gives each website its own message: it is used without asking and turns on One I wrote per site for that import, and websites without one get your Agent message. Any other column that may hold messages is shown to you first, and columns such as notes, status or verification are never sent. The card then says how many websites in your list will get a personal message from a file, with Use my Agent message for them to switch back.

2. Check These Websites

Press Check these websites (a dropped file starts on its own). A category dialog lets you label this batch (E-commerce, SaaS, a name of your own) so you can tell your lists apart later; confirm, and the check starts. Your list is saved on your account and checked in batches of up to 1,000 websites: the extension opens each website in a background tab to find its contact form. Keep the side panel open until the check finishes (switching tabs inside it is fine): the import moves on to the next batch only while the panel is open. If you close it, the import waits, and you can resume it later from the Targets tab.

3. The Progress Panel

While the check runs you see the percentage, the stage (opening websites, looking for contact pages, checking forms), how many were checked, how many forms were found, how many had no form, the sites being checked right now, the rate and the time left. Hide collapses it into a small bar so you can keep working; Cancel Import stops the check and keeps the websites not checked yet, so you can resume or discard them later.

4. The Pre-Flight Report

When it finishes: how many websites are ready, how many have no contact form (with the plain-language reason, Open and Add URL for each, and Retry for the ones worth a second try), how many you already contacted before (with Skip all or Keep them), and how many your remaining credits can send right now. Continue to sending takes you to the Send tab.

5. Limits

Per import: 50 websites on the free plan and pay-as-you-go, 500 on Starter, 1,000 on Growth, 2,500 on Pro, unlimited on Scale. A larger list opens a notice that offers to import the first websites your plan allows now, or to upgrade for the rest. When you have no credits left at all, the Targets tab does not check new websites and shows the plan picker instead.

Related questions:

CSV upload is the recommended way to load lists of 100 or more URLs into contactID. It handles large files, mixed formats, and lets you re-import the same list without retyping. Here is how.

1. Prepare Your File

Put one website per row. contactID finds the website column on its own: a header such as URL, Website, Domain, Site or Link is used first (when several match, the one with the most real websites wins, so a Google Maps or social media link column is skipped), otherwise the column whose cells are websites. A file with only website addresses and no header works too. There is no column picker.

Other columns become tags you can use in your message, listed under Columns we found on the Targets tab (up to 12 columns; a Name or Company Name column becomes {{business_name}}). Columns named like your own details (Company, Email, Phone, Industry, First Name) and link columns do not become tags, so they never replace your sender details. A column named Message holds a personal message for each website (see One I wrote per site).

Example:

“ URL,City,Owner Name https://acmecorp.com,Austin,Sarah https://widgets.io,Denver,Mark “

This gives you {{city}} and {{owner_name}} in your message.

2. Supported File Formats

  • .csv (comma-separated). Default for exports from Google Sheets, Excel, and most CRMs.
  • .xlsx and .xls (Excel). Only the first sheet is read.
  • .txt: one website per line, or columns separated by a tab or a | (a first row of column names turns the other columns into tags).

For tab-separated data, save the file as .txt.

3. Upload The File

  • Open the extension side panel and go to the Targets tab.
  • Drop your file on Drop a CSV, TXT or Excel file, or click that area and pick it.
  • The import starts right away; you do not need to press Check these websites.

4. Duplicates And Plan Limits

Duplicate addresses inside the file are removed first (http and https, www and a trailing slash count as the same address). If the file has more websites than your plan allows in one import, a notice offers to import the first ones your plan allows now.

5. Name And Start

A dialog asks for a category name for this import; confirm, and the check starts. When it finishes, the Targets tab shows how many websites are ready to contact, how many have no contact form, and which ones you contacted before.

6. Handling Large Files

For big lists:

  • Every import is saved on your account and checked in batches of up to 1,000 websites. Keep the side panel open until the check finishes: the import moves on to the next batch only while the panel is open, and an import left waiting can be resumed later from the Targets tab.
  • No email is sent when an import finishes, and imported files are not kept as reusable lists, so keep your original file.
  • One import is capped by your plan (50 on pay-as-you-go, 500 on Starter, 1,000 on Growth, 2,500 on Pro, no limit on Scale). Split a bigger file into parts that fit.

7. Common File Problems

Errors you might hit and how to fix:

  • “No valid URLs found.” No cell in the file looks like a website address. Check that the website column holds addresses such as example.com or https://example.com.
  • “Could not read Excel file” or “Excel sheet … is empty.” Move your list to the first sheet, or save the sheet as CSV and import that.
  • “Import larger than your plan allows.” Import the first websites your plan allows now, or upgrade for the rest.
  • “Not sent, no credit used: the message still holds {{city}}.” That website’s cell was empty, longer than 120 characters or a web address, so there was nothing to fill in, and contactID does not send a message with a tag left in it. Fill the cell and press Retry, or keep the tag out of the message.

Related questions:

For small batches, pasting URLs directly is faster than making a CSV. Here is how manual URL import works and its limits.

1. Open The Paste Box

  • Open the extension side panel and go to the Targets tab.
  • Paste into the box under Who should we contact?.
  • Press Check these websites when your list is in.

2. Paste Your URL List

Paste your URLs into the text area, one URL per line. Common patterns that work:

“ https://acmecorp.com https://widgets.io/contact example.co.uk subdomain.example.com/about “

You can use HTTPS or HTTP prefixes, or leave them off (contactID adds https:// by default). www is optional.

3. Extra Whitespace, Blank Lines, Numbering

contactID is forgiving on formatting:

  • Leading/trailing whitespace is trimmed.
  • Blank lines are ignored.
  • Extra spreadsheet columns on a line (after a tab, a | or a comma) are cut off; only the address is kept. With One I wrote per site on, the text after a tab or a | is that website’s personal message instead.
  • Line numbers or bullets (like “1. https://…” or “- https://…”) are not removed: those lines are skipped. Remove the numbering before you paste.

You can paste rows straight from a spreadsheet, but not from a numbered or bulleted list.

4. Comma-Separated URLs

Not supported in the manual paste. If you have URLs comma-separated on one line, use CSV upload instead (or open them in Excel, transpose to a column, save as CSV).

5. Manual Import Limits

A paste follows the same per-import limits as a file:

  • Pay-as-you-go (including the free tier): 50 websites.
  • Starter: 500.
  • Growth: 1,000.
  • Pro: 2,500.
  • Scale: no limit.

Above your limit, contactID offers to import the first websites your plan allows.

6. When To Use Manual Paste Instead Of CSV

  • Testing a small list of 10 URLs.
  • Adding a few extra URLs to an existing batch.
  • Working from a document where copy-paste is faster than exporting to CSV.

7. Deduplication On Paste

The same address twice in one paste is checked once (http and https, www and a trailing slash count as the same address). A website that is already in your list in this browser (in any filter, Sent and Trash included) is skipped without a notice. When the check finishes, contactID shows how many forms were found and how many websites had none.

Related questions:

contactID handles duplicates in two places: inside a single import, and against websites you contacted before.

1. Within One Import

The same address twice in a list is queued once. Different pages of the same website are treated as separate entries when they resolve to different contact pages.

2. Websites You Already Contacted

After a check, the pre-flight report shows Contacted before: every queued website that this account already submitted a form to, from any browser, with the number of messages and the last date. You decide: Skip one, Skip all (they move to the trash, where you can restore them), or Keep them to contact again. There is no automatic waiting period. One exception: a website that is already in your list in this browser (in any filter, Sent and Trash included) is not added again; to contact it again, use Reprocess on its card in the Sent filter, or Restore it from the Trash.

3. The Same Website Twice In Your Queue

Two queued pages of one website (acme.com/contact and acme.com/contact-us, or shop.acme.com) would each get a message. Targets then shows Same website twice: Keep one keeps that website’s contact page (or the first page in the queue) and moves the others to the trash, Keep one of each does it for every website listed, and Keep them all leaves the queue as it is.

4. Websites You Never Want To Contact

In Settings, Do not contact takes one website per line: an address, a domain or an email address (which stands for its website). A domain covers its sub-domains. A listed website is not checked when you import it, and a queued one is not sent to: it shows with “Not sent, no credit used: … is on your do-not-contact list (Settings).” and no credit is used. The list is kept in this browser and goes with Settings when you export them.

5. Why It Matters

Contacting the same business twice in a short time looks like spam to them and costs you a credit. The guard is there so you make the call with the facts in front of you.

6. Trash And Restore

Websites you skip or trash sit under the Trash filter on the Send tab. Restore returns them to the queue.

Related questions:

Importing 1,000 URLs is very different from importing 10. Here are the practices that make big batches run smoothly and get better results.

1. Clean The List Before Importing

A dirty URL list does not cost anything to import (credits are only spent when a site confirms a send), but garbage URLs still waste time and can burn a credit if a junk page happens to have a form. A clean list keeps your run efficient. Before import, remove:

  • Non-web URLs. LinkedIn profiles, Twitter handles, phone numbers, email addresses.
  • Homepages of aggregators. Directory sites, marketplaces, review platforms; these usually do not have their own contact forms.
  • Social media pages. Facebook, Instagram, LinkedIn pages are not filled by contactID.
  • Duplicates. Even though contactID deduplicates, a clean list gives you a truer count.

Do this in a spreadsheet before uploading.

2. Segment By Vertical Or Intent

Rather than one giant list, segment into targeted lists per vertical, region, or intent:

  • “SaaS companies, US, series-A stage”
  • “Design agencies, EU”
  • “E-commerce brands, UK”

Segmentation lets you use different agents (different pitches) per segment, and reply-rate analysis is more meaningful.

3. Batch Size Per Run

The sweet spot for a single batch is 500 to 2,000 URLs. Above 2,000:

  • Chrome tabs pile up and slow down.
  • If you hit an issue mid-batch, the recovery is more painful.
  • The AI Personalization budget gets harder to track.

Break bigger campaigns into daily batches of 1,000 to 2,000.

4. Time Of Day

For B2B outreach, best times to run a batch:

  • Tuesday to Thursday, 8 AM to 11 AM in the recipient’s time zone. Contact forms are checked most often in this window.
  • Avoid Fridays after noon and weekends. Submissions pile up in an inbox nobody checks until Monday.
  • Avoid major holidays in the recipient’s country.

contactID has no scheduler: a batch starts when you press Start on the Send tab. To hit this window, import your list beforehand and press Start at the time you want, with Chrome open while it sends.

5. Test Before Committing To A Big Batch

Before running 5,000 URLs, run 50 first. Watch:

  • Success rate. If less than 60% succeed, refine your list or agent before going bigger.
  • Reply pattern. If replies say “we don’t accept unsolicited pitches”, refine your targeting.
  • Signal from AI cost. If AI cost per send is much higher than expected, tune the prompt (see AI Personalization).

6. Monitor The First 100 Sends Live

Even after testing, watch the first 100 sends of a big batch live. Failures early on often signal an issue (a change in a common form builder, a captcha you did not expect, an IP getting throttled) that will affect the rest of the batch.

7. Export Results After Every Batch

Every batch’s results are exportable: Advanced Export on the Send tab, or Export… on the dashboard’s Analytics page. Do this after every batch so you have a clean record even after you clear the websites from the Send tab.

8. Preserve Your Original Import Files

Save every imported CSV alongside the results export. Six months later you may want to know exactly which list produced which reply pattern.

Tip: Consider a simple naming convention: “campaign-name-vertical-YYYY-MM-DD.csv” for the source and “results-campaign-name-YYYY-MM-DD.csv” for the export.

Related questions:

An import is the check contactID runs on your list before anything is sent. Your list is saved on your account, and the side panel moves the check from batch to batch: keep it open until the check finishes. If you close it, the import waits, and you can resume it later from the Targets tab.

1. Statuses You Will See

  • Running: the check is in progress. The progress panel shows batches, sites checked, forms found and time left.
  • Waiting: a saved import is on the server, ready to continue. You get Resume and Discard.
  • Paused: you pressed Cancel Import, or the check stopped on an error. Resume picks up where it stopped.
  • Timed out: nothing happened for 24 hours. It is still resumable.
  • Completed: every website was checked; the pre-flight report is ready.
  • Discarded: you pressed Discard and confirmed. The websites not checked yet are deleted; websites already checked stay in your list.

2. Per Website

Each checked website ends up Queued (contact form found) or No form (no usable form: the reason is shown, and you can retry, open the site, or add the direct contact page URL).

3. Two Imports At Once

If a previous import is still pending when you start a new one, contactID asks whether to include those websites, keep them for later, or discard them.

Related questions:

You can stop the check of an import or a sending run at any time. Here is how, and what happens to your websites and credits.

1. Cancel A Check In Progress

While contactID checks your websites, the progress panel has two buttons:

  • Hide keeps the check running in a small bar so you can keep working.
  • Cancel Import stops the check. The websites not checked yet stay saved on your account, and the Targets tab shows an Import paused card with Resume and Discard.

2. Discard An Import

On the Import paused, Import waiting or Import timed out card, press Discard and confirm. The websites not checked yet are deleted; this cannot be undone. Websites already checked stay in your list.

3. Closing The Panel Or Chrome

The side panel moves the check from batch to batch, so an import waits while the panel or Chrome is closed. When you open the panel again, the Targets tab shows the import with Resume and Discard, and contactID may also ask right away (Resume Now or Pause & Keep). There is no Import Jobs page on the dashboard: imports are managed on the Targets tab.

4. Pausing Or Stopping A Sending Run

On the Send tab:

  • Pause stops new websites from starting. Tabs already open finish their form. Resume continues.
  • Stop asks for confirmation, then closes the open tabs right away. Websites that were being filled go back to Queued, and queued websites stay queued.

5. What Happens To Your Credits

Checking websites never uses credits. A credit is used only when a site confirms a send, so a form that finishes in a tab still open after you press Pause is charged when the site confirms it, and nothing else is charged for cancelling, pausing or stopping.

6. Starting Again

Press Start sending on the Send tab to continue with the websites still Queued. To switch pitch mid-list, pick another agent when you start (in Sending as, or in the sender picker that opens when you have two or more agents): every queued website then goes out with it. See the Setting A Default Agent article.

Related questions:

The maximum import size depends on your plan and the import method. Here are the exact limits and how to work with them.

1. Per-Import Limits By Plan

The size of a single import (one paste or one CSV):

  • Pay-as-you-go (including the free tier): 50 URLs.
  • Starter: 500 URLs.
  • Growth: 1,000 URLs.
  • Pro: 2,500 URLs.
  • Scale: unlimited (no per-import cap).

Above your plan limit, a notice offers to import the first websites your plan allows now; upgrade or split the file for the rest.

2. Importing Large Volumes Across Multiple Batches

There is no daily import limit. To load a large list, import it in batches that each fit your plan’s per-import cap. For example, on Growth (1,000 per import) you can import a 10,000-URL list as ten imports back to back. On Scale there is no cap, so you can import the whole list at once.

3. Concurrent Batches

One import is checked at a time per account. If you start a new one while another is still pending, contactID asks whether to combine them, keep the earlier one for later, or discard it. An import runs in one browser at a time; another browser is told it is already running elsewhere.

All checked websites go into one list in your browser, and Start sending works through all of them. To send faster, raise the concurrency (below) or send from a second browser with its own list (see the multi-device article).

4. How Sending Is Paced

contactID does not impose a per-day submission quota. How fast forms go out is controlled in two ways:

  • Concurrency (your setting). Form Filling Concurrency in Settings decides how many websites the extension works on at once. The default is 5. Higher values send faster but use more of your computer’s resources.
  • Human-like typing. Each field is typed at a natural pace rather than pasted instantly, so submissions look human and pass more form defenses.

Separately, the contactID service applies standard API rate limits to protect the platform. These are normal service protections, not a cap on how many businesses you can contact, and in everyday use you will not hit them.

5. Working Around Limits

  • Split large files. Split a large list into files that fit your plan’s per-import limit (for example 1,000 rows each on Growth) and import them one after the other.
  • Send in daily batches. Import one part of a large list each day and press Start. There is no scheduler; each batch starts when you start it.
  • Upgrade one tier temporarily. An upgrade applies at once and charges the prorated difference for the rest of the period. There is no direct downgrade: to go back to the lower plan after the campaign, cancel and subscribe to it when the current period ends (see How To Downgrade Your Plan?).

6. Very High Volume

Scale has no per-import cap and 19,999 websites included per month, which covers almost every use case. If you expect to exceed that regularly, reach out through support to talk through options.

Related questions:

Free tier accounts have tighter import limits than paid accounts. Here is the exact difference so you know what to expect and when it makes sense to upgrade.

1. Free Tier At A Glance

As a free user you can:

  • Import up to 50 websites at once.
  • Import as often as you like: there is no daily limit.
  • Send up to your remaining free credit balance (starts at 10).

When your free credits are used up and you have no other credits, the Targets tab stops checking new websites and shows the plan picker until you buy credits or subscribe. Websites already in your list stay saved.

2. Paid Tier At A Glance

On any paid plan (PAYG or subscription) you get:

  • Per-import limits that scale with your subscription plan (see the previous article). Pay-as-you-go stays at 50 per import.
  • No daily import limit, on any plan.
  • Sending capacity limited only by your credit balance.

3. When The Free Tier Is Enough

Stick with the free tier if:

  • You want to try contactID with a real batch before deciding.
  • You are testing a specific pitch on a small list.
  • Your total outreach is a handful of websites: the free allowance is 10 websites in total, not per month (rare in B2B; most users go through 10 in an afternoon).

4. When To Upgrade

The free tier stops being enough when:

  • Your list exceeds 50 websites and you do not want to split it (a larger import needs a subscription plan; Starter allows 500).
  • You want your messages without the “Sent via contactID extension” line.
  • You want reliable, ongoing outreach beyond a single test batch.

The cheapest upgrade is pay-as-you-go: $10 buys 66 websites, no subscription. Starter at $9.99/month makes sense if you plan on 100+ per month.

5. What Free Users Can Still Do

Every feature works on the free tier:

  • Agents.
  • AI Personalization (uses AI wallet balance, separately).
  • Rich text editor.
  • Analytics (every submission, with Export…).
  • CSV export.
  • Multi-device sign-in.

You do not lose access to any feature by staying on free. What differs is volume (10 free credits, 50 websites per import) and the “Sent via contactID extension” line at the end of every message.

6. What Paying Changes

There is no priority queue and no API for connecting a CRM on any plan. Paying changes these things:

  • The signature. Any purchase removes the “Sent via contactID extension” line for good.
  • Credits. A credit pack adds website credits; a plan adds website credits and lead credits for Find websites each time it is paid (every month on monthly billing; on annual billing, the whole year of website credits and one lead credit allowance at the start of the year).
  • Import size. A subscription plan raises the per-import limit (500 on Starter, 1,000 on Growth, 2,500 on Pro, no limit on Scale). Buying pay-as-you-go credits keeps the limit at 50.

Details are under Pricing & Plans.

Related questions:

Websites that come from Find websites (a list you unlock, or a file enriched with Enrich my file, sent with Send to extension) carry the business’s details into your messages as merge fields. Use them anywhere in your message (not in the subject line, where they come out empty); they are filled per website:

  • {{lead_name}}: the business name as listed on Google Maps
  • {{lead_city}}, {{lead_state}}, {{lead_country}} (the country code, for example US)
  • {{lead_category}}: the main category (for example restaurant)
  • {{lead_rating}}, {{lead_reviews}}: the Google rating and review count
  • {{lead_phone}}, {{lead_email}}: the business phone and the business email found on the website
  • {{lead_technologies}}: what the website is built with, comma separated
  • {{website}}: the business website

Example: “Hi {{lead_name}}, we help {{lead_category}} businesses in {{lead_city}} get more inquiries.” When a business has no value for a field, the tag is left empty. For a website you added yourself (pasted or from your own file) these tags are not filled at all, so the message is not sent to it (“Not sent, no credit used: the message still holds {{lead_name}}”). Use them in a message that only your lead lists receive. The deliverability check on the Agent tab lists them as unknown tags; for websites from your lead lists you can ignore that warning.

Related questions:

Still stuck? We’re happy to help.

Install the extension, start a free trial, or reach out to support.

Back to Help Center