Skip to content

Importing companies

The import wizard turns a CSV or Excel sheet of target companies into tracked rows that the sync engine watches for buying signals. Four stages — upload, map, import, sync.

1. Upload

  • Drag-and-drop or click to pick a .csv, .xlsx, or .xls file.
  • We read it client-side — your file never hits a third-party service.
  • Up to ~10,000 rows handled in-browser. Bigger sheets: split + run twice.

What columns to include

At minimum you need a Company name column. Anything else is optional; if a column exists, you can map it. Common useful fields:

FieldWhy it matters
Company nameRequired. Used as the display label across the app
LinkedIn URLLets the linkdapi source resolve the company. Without this, LinkedIn posts won't fetch
WebsitePowers the Company-newsroom source (tries /feed, /rss, /news/feed)
IndustryFilters in the dashboard + Importing data modal
CountryFilters + Slack summary grouping
OwnerMaps to "account owner" — shown on send dialogs so you know which rep to send to
OrganisationOptional grouping label (parent organisation, region, division) — used to filter signals across the dashboard
Priorityhigh / medium / low — drives the smart-sync planner's budget order
DescriptionUsed by Claude when classifying — helps with ambiguous signals
Create date / Last activity dateTracked for filters; not used by sync

Columns we don't have a slot for get ignored.

2. Map

After upload, the wizard shows your file's columns on the left and our schema fields on the right. For each schema field, pick which of your columns to source from.

  • Required field unmapped → import button stays disabled
  • Mapping persists per session — close + reopen the wizard and your mapping is remembered
  • Edit cells inline in the preview table before importing if a row needs fixing

Same filter bar as everywhere else

Search + priority + industry + owner filters work over the mapped preview so you can scope to "only high-priority rows" or "only the medical-device industry" before clicking Import.

Validation

Rows that fail validation (no company name, malformed LinkedIn URL, etc) are highlighted in red and skipped from import. The wizard tells you exactly how many rows are valid vs invalid before you commit.

3. Import

Click Import N valid rows. We POST /api/companies/import with the validated payload. Backend deduplicates by:

  • exact match on LinkedIn URL slug (/company/<slug>)
  • case-insensitive company name match

Duplicates are skipped silently with a per-row reason returned. Your existing tracking history is preserved — re-importing the same company doesn't reset its signal feed.

Successful imports immediately appear in:

  • The dashboard's signal feed (once a sync runs)
  • The Companies page
  • The Onboarding wizard's company table preview

4. Sync

Last wizard step. We default to company_site, google_news, openfda, and crunchbase sources for a first-time sync (skipping LinkedIn since most rows won't have it warmed up yet). You can override sources + lookback before clicking Sync now.

Skip the sync and the cron picks it up at the next interval (if auto-sync is ON). New orgs have auto-sync OFF — see the Auto-sync docs.

Files vs the Settings → Import path

The onboarding wizard + Settings → Import use the same dialog. The only difference is post-import behaviour:

  • Onboarding wizard: shows the imported table + lets you continue to "Signal types" step
  • Settings → Import: closes the dialog + drops you back into Settings

Common gotchas

SymptomLikely cause
"Required field unmapped"Company name column not selected on the map step
Most rows invalidSheet has a junk header row; remove the title row above the column headers
LinkedIn URLs marked invalidMust look like https://www.linkedin.com/company/<slug>linkedin.com/in/... (personal profile) won't pass
Some rows dropped silentlyAlready imported earlier — backend deduped by slug or name match
Sync fires no signals for a companyNo LinkedIn URL + no website → only Google News + Regulatory have anything to query

Re-running the import

You can re-upload anytime via Settings → Import companies. Existing rows are preserved; only new ones get inserted.

Client Pulse — buying signals for your target accounts. Privacy · Terms · Open app ↗