Importing Target Websites
Bring URLs into ContactID via CSV upload, manual entry, or bulk import. Understand import limits and job statuses.
To fill contact forms, ContactID first needs to know which websites to visit. Here are the four ways to load a URL list into the queue.
1. The Four Import Methods
ContactID supports:
- Paste URLs. Copy and paste a list of URLs directly into the import box, one per line.
- Upload CSV. Upload a spreadsheet file with URLs in one column.
- Import from a saved list. Pick from a URL list you previously imported and saved.
- Bulk API import. Advanced; for Scale-plan users pushing lists from their CRM.
2. Paste URLs (Fastest For Small Batches)
- Open the extension side panel or dashboard Websites section.
- Click Import, then Paste URLs.
- Paste your URL list, one URL per line. HTTPS/HTTP prefixes are optional; www is optional.
- Click Add To Queue.
The extension parses your list, deduplicates, and adds each unique URL to the queue.
Best for lists of 10 to 100 URLs. For larger lists, use CSV upload for a smoother experience.
3. Upload CSV
- Click Import, then Upload CSV.
- Drag your CSV file into the drop zone or click to browse.
- Confirm which column contains the URLs (ContactID auto-detects when a column header is “URL”, “Website”, or similar).
- Click Import.
The CSV can have any number of columns; ContactID only reads the URL column. Other columns (company name, industry, etc.) are ignored on import; store them in your CRM separately.
4. Import From A Saved List
Any URL list you have imported before is saved to your Website Lists. To reuse:
- Click Import, then Saved Lists.
- Pick a list from the dropdown.
- Click Load Into Queue.
Useful for recurring campaigns to the same target segment.
5. What Happens After Import
Every imported URL is validated against these rules:
- URL format. Must be a valid URL with http:// or https:// (added automatically if missing).
- Duplicate check. Duplicates within the import are collapsed to one entry.
- Prior send check. URLs you have contacted before with this agent are flagged; you can skip them or resend.
- Blocklist check. Certain domains (major consumer platforms, government sites, adult content) are blocked and reported to you.
6. Import Limits By Plan
Different plans have different per-import limits:
- Free tier: Up to 100 URLs per import.
- Pay-as-you-go: Up to 500 URLs per import.
- Starter: Up to 1,000 URLs per import.
- Growth: Up to 5,000 URLs per import.
- Pro: Up to 20,000 URLs per import.
- Scale: Up to 50,000 URLs per import.
Higher limits require the API (Scale plan and above).
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 CSV
The CSV needs to have URLs in one column. The column can be:
- Named “URL”, “Website”, “Domain”, or “Site” (auto-detected).
- Or any other name; you pick the column at import time.
Other columns are ignored on import; store metadata (company name, industry, etc.) in your CRM separately.
Example:
“ Company,URL,Industry Acme Corp,https://acmecorp.com,SaaS Widgets Inc,https://widgets.io,Retail “
2. Supported File Formats
- .csv (comma-separated). Default for exports from Google Sheets, Excel, and most CRMs.
- .tsv (tab-separated). Alternative if your data contains commas.
- .txt (one URL per line). Simplest format; no columns.
Excel .xlsx is not supported directly. Save as .csv from Excel first.
3. Upload The File
- Go to the extension side panel or dashboard Websites section.
- Click Import, then Upload CSV.
- Drag your file into the drop zone. Or click Browse and pick from your file system.
4. Confirm The URL Column
If your CSV has multiple columns, ContactID asks which one contains the URLs. Pick from the dropdown. If your column is named “URL” or similar, this step is skipped and the URL column is used automatically.
5. Preview And Import
Before final import, ContactID shows a preview:
- First 5 URLs from your file so you can catch column misalignment.
- Total URL count in the file.
- Duplicate count (URLs that appear more than once within your file).
Click Import to add every unique URL to the queue.
6. Handling Large CSVs
For files over 5,000 URLs:
- Upload can take up to two minutes; do not close the tab.
- Very large imports (10,000+) are processed in background jobs. You get an email when complete.
- Use the Website Lists feature to save the import for reuse.
7. Common CSV Problems
Errors you might hit and how to fix:
- “Invalid file format.” Check the extension is .csv, .tsv, or .txt. Not .xlsx.
- “No URL column detected.” Rename your column header to “URL”, or pick manually at import time.
- “All rows invalid.” Your URLs are missing http:// or https:// on every row; ContactID adds these automatically but some anti-CSRF servers reject the file if none is present. Add https:// to at least one URL to trigger auto-detection.
- “File too large.” Split into two files of under 50,000 rows each.
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-URLs Import
- Open the extension side panel or dashboard Websites section.
- Click Import, then Paste URLs.
- The manual import screen shows a large text area.
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.
- Line numbers or bullets (like “1. https://…” or “- https://…”) are stripped automatically.
You can paste directly from a numbered list in a document or spreadsheet without cleaning it first.
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
By plan:
- Free tier: 100 URLs per paste.
- Pay-as-you-go: 500 per paste.
- Starter and above: 1,000 per paste.
Above these limits, use CSV upload.
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
If you paste a URL that is already in your queue (from a prior import or paste), it is silently skipped. The Import result summary shows the count of new URLs added versus already-in-queue.
Duplicates are common in real-world URL lists. ContactID handles them in two ways: within-import deduplication and cross-batch history checks. Here is what happens to your credits and your queue.
1. Duplicates Within The Same Import
When you paste or upload a list that contains the same URL twice (or more), ContactID collapses it to one entry.
Example: your CSV has:
“ https://acme.com https://acme.com acme.com https://www.acme.com/contact “
All four of these might be treated as the same site after normalization (see next section). Only one entry is added to your queue.
2. URL Normalization Rules
Before deduplication, ContactID normalizes URLs so trivial differences are collapsed:
- Protocol (http:// vs https://) is treated as the same site.
- www vs bare domain are treated as the same site.
- Trailing slash is ignored.
- Query parameters (?utm_source=…) are ignored.
- Path (/contact vs /about) is treated as the same site.
The net result: any two URLs pointing to the same domain are considered duplicates and collapsed.
Note: If you want to reach a specific subpage (like /careers vs /about), the normalization means only the domain is used; ContactID will try to find the main contact form regardless of the path you provided.
3. Duplicates Across Prior Sends
When you import URLs you have contacted before with the same agent, ContactID flags them and asks:
- Skip already-contacted. (Default; recommended.) Duplicates are removed from this batch.
- Contact again. Ignores the prior send and includes the URL.
Cross-batch history is per-agent. If you contacted a URL with Agent A and now switch to Agent B, it is not flagged.
4. Cooldown Period For Recontacts
Even if you choose “Contact again”, ContactID enforces a minimum cooldown:
- 7 days minimum since the last contact from the same account (any agent).
Attempting to send sooner shows a warning; you can override on a per-URL basis but the default is to respect the cooldown.
5. Cross-Account Duplicate Checks
ContactID does not deduplicate across different accounts. If your teammate on their own account contacts the same URL, that does not affect your queue.
6. What Counts As A Send
Only successful sends count for duplicate tracking. If a batch tried to contact acme.com but failed (form not found, blocked, error), the URL is not marked as sent and is not flagged as a duplicate on re-import.
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 wastes credits on garbage URLs. 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.
You can schedule a batch to run at a specific time from the Import screen; see the article on scheduled 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 Activity data is exportable to CSV. Do this after every batch so you have a clean record even if you later delete the results from ContactID.
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.
Every import you do creates an Import Job, tracked in the Import Jobs section of your dashboard. Here is what each status means and when it appears.
1. Where To See Import Jobs
- Sign in to your dashboard.
- Click Import Jobs in the left sidebar.
- The table shows every import, newest first, with per-row status.
2. Status Meanings
- PARSING. The import file is being read and URLs extracted. Usually lasts a few seconds.
- VALIDATING. URL format is being checked, duplicates removed. Fast for small imports; up to a minute for 10,000+ rows.
- QUEUED. URLs are ready in your queue but no batch has been started against them yet. This is where imports sit between “import complete” and “you clicked Start”.
- IN_PROGRESS. A batch against this list is running. Numbers under Sent, Failed, and Pending update in real time.
- COMPLETED. All URLs in this list have been processed (sent or failed). No more activity expected.
- PARTIALLY_COMPLETED. The batch was cancelled or hit an error, leaving some URLs unsent. You can resume from the Import Jobs page.
- CANCELLED. You explicitly cancelled the batch before it finished. Unsent URLs remain in the list; you can restart any time.
- FAILED. The import itself failed (invalid file, no URLs found, plan limit exceeded). Nothing was added to your queue.
3. Per-Job Details
Click any row in the Import Jobs table to open a detailed view:
- Total URLs in this list.
- Successful sends.
- Failed sends with a breakdown by failure reason.
- Skipped URLs (duplicates, blocklisted).
- Credits used during the batch.
- AI cost (if AI Personalization was on).
- Start and end timestamps.
- Agent used.
4. Resuming A Partially Completed Job
If your batch stopped mid-run (cancellation, network drop, browser crash), it can be resumed:
- Open the Import Job details.
- Click Resume Batch.
- The batch picks up from the first URL that was not yet attempted.
Only URLs that were untouched are retried. URLs that already succeeded are not resent. URLs that failed are retried by default; you can toggle this off if you would rather skip them.
5. Deleting An Import Job
Import Jobs can be deleted for cleanup:
- Open the row’s three-dot menu.
- Click Delete Import Job.
- Confirm.
Deleting removes the job from your history but does not remove the Activity records for URLs that were sent; those stay in the Activity log.
6. Job Retention
Completed Import Jobs are retained for six months. After that they are automatically deleted to save storage, though the Activity records for individual sends stay for 12 months.
If you want to preserve a job forever, export it to CSV within six months of completion.
You can cancel a batch mid-run if you notice a problem, need to pause work, or want to switch agents. Here is how, and what happens to your credits.
1. Cancel From The Extension Side Panel
Fastest option if the extension is open:
- Open the side panel.
- Click Pause in the top-right of the Queue view.
- Once paused, click Cancel Batch.
- Confirm the cancellation.
2. Cancel From The Dashboard
If you closed the extension window:
- Sign in to your dashboard.
- Go to Import Jobs.
- Find the IN_PROGRESS row.
- Click Cancel.
- Confirm.
The cancellation propagates to the extension within seconds. Any in-flight tabs finish their current form before stopping (so credits are consumed correctly for those).
3. What Happens To Sends In Progress
When you cancel, ContactID stops sending new URLs but lets tabs that are already open finish. The typical delay from cancel-click to fully stopped is 5 to 30 seconds depending on how many concurrent tabs were running.
- URLs already sent stay sent. No retraction.
- URLs currently being filled are either completed (if fast enough) or marked failed (if the tab times out).
- URLs not yet started are left in the QUEUED state, ready to resume later.
4. What Happens To Your Credits
Credits are consumed on successful send only. Cancellation does not affect credits already consumed and does not consume additional credits.
If a tab was in the middle of filling when cancelled, the credit is consumed only if the form was actually submitted before the cancel took effect.
5. Resuming After Cancellation
- Go to Import Jobs.
- Find the cancelled row (status: CANCELLED).
- Click Resume Batch.
- The batch restarts from the first QUEUED URL.
You can change the active agent before resuming if you want to switch pitch mid-list. See the Setting A Default Agent article.
6. Pausing Versus Cancelling
Pause and cancel do different things:
- Pause stops new sends but keeps the batch “active”. Resume in one click; the extension knows where to pick up.
- Cancel ends the batch. To resume, you go through the Import Jobs interface as described above.
For a quick coffee break, pause. To fully stop and switch to something else, cancel.
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):
- Free tier: 100 URLs.
- Pay-as-you-go: 500 URLs.
- Starter: 1,000 URLs.
- Growth: 5,000 URLs.
- Pro: 20,000 URLs.
- Scale: 50,000 URLs.
Attempts above your plan limit are rejected with a message; you can either upgrade or split the file.
2. Per-Day Total Limits
Across multiple imports, the maximum you can import in one calendar day:
- Free tier: 100 URLs total per day.
- Pay-as-you-go: 2,000 per day.
- Starter: 5,000 per day.
- Growth: 20,000 per day.
- Pro: 50,000 per day.
- Scale: No daily limit (rate limits still apply, see below).
Daily limits reset at midnight UTC.
3. Concurrent Batches
You can have multiple imports in the queue at once, but only one batch runs at a time per device. Others wait in QUEUED state until the running one finishes.
To parallelize, use multiple devices (see the multi-device article).
4. Sending Rate Limits
Separate from import limits, sending is rate-limited to protect target sites:
- 60 submissions per minute maximum, across all your devices.
- 10,000 submissions per day maximum on non-Scale plans.
- No daily submission limit on Scale, but the per-minute cap still applies.
If you hit a rate limit, sending pauses briefly and resumes automatically.
5. Working Around Limits
- Split large files. Use Excel or Google Sheets to split a 100,000-row file into 5 files of 20,000 rows each. Import them sequentially.
- Schedule daily batches. Set up an import per day if you have volume that exceeds a single-day limit.
- Upgrade one tier temporarily. ContactID does not require a full-month commitment; you can upgrade for the duration of a campaign and downgrade after.
6. Enterprise Volume
Above 50,000 URLs in one import, contact [email protected]. Enterprise pricing includes custom rate limits, batch APIs, and priority support.
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 100 URLs at once.
- Import up to 100 URLs total in a single day.
- Send up to your remaining free credit balance (starts at 30).
Once your 30 free credits are used, imports still work but sending stops until you buy credits or subscribe.
2. Paid Tier At A Glance
On any paid plan (PAYG or subscription) you get:
- Per-import limits that scale with your plan (see the previous article).
- Per-day import limits that scale with your 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 volume is under 30 websites per month (rare in B2B; most users go through 30 in an afternoon).
4. When To Upgrade
The free tier stops being enough when:
- Your list exceeds 100 URLs and you do not want to split it.
- You need to reach the same URL more than once with different agents.
- 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.
- Activity log.
- CSV export.
- Multi-device sign-in.
You do not lose access to any feature by staying on free; only sending volume is limited.
6. What Free Users Cannot Do
The following require a paid plan:
- The Scheduled Sends feature (start batches at a specific time).
- The Priority Queue (skip past normal rate limits during peak times).
- The Bulk API for CRM integration.
Details on these are on the Plans page.
Still stuck? We’re happy to help.
Install the extension, sign up, or reach out to support directly.




