# Uploading your own list

An uploaded list enters through `prospect_upload`, which reads a spreadsheet or delimited file, turns each row into a prospect record, and puts every one of them through the same identity, evidence and compliance rules a discovered prospect goes through. A row you supply is not privileged: an address on it is still recorded with its provenance, and no missing address is filled in.

- **Status:** Available
- **Audience:** both
- **In the app:** #/prospects, #/data
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/prospects/prospect-upload/

## The file

Uploads go through the same file service everything else in Connect uses — `file_workspace` over `media_assets`, already workspace-scoped and under row-level security, which is why an import needs no new storage and inherits the isolation the rest of your data has. CSV, TSV and XLSX are read with the standard library.

> **Careful** Two classes of file are refused before a single row is read: documents carrying DOCTYPE or ENTITY declarations, and archives that expand far beyond their compressed size. The refusal is deliberate and is not a parsing failure you can retry your way past.

The Data grid at `#/data` has a prospects sheet with its own import, and it is the same path: the grid is a view over records, not a second database, and every change it makes goes through the service that owns the record. Importing there and importing from the prospects screen produce identical rows.

## What a row needs

A row must identify an organisation or a person well enough to be resolvable. Everything else is optional, and optional means genuinely optional — a row with a name and a town becomes a researched prospect with no contact method, which is a normal and useful state here rather than a broken one.

| What you supply | What Connect does with it | What it does not do |
|---|---|---|
| Organisation or person name | Uses it to resolve and to research | Does not treat it as verified because you typed it |
| Location | Narrows research and matching | Does not infer a location from a name |
| An email address | Records it with provenance: supplied by you, in this import, on this date | Does not test deliverability by sending to it |
| No email address | Keeps the prospect, sets a next action that is not email | Does not generate one from a name and a domain |
| Free-text notes | Kept against the record as your own claim | Does not promote it to an evidence-backed claim |

> **Note** The distinction in the last row is the one people trip over. Anything you supply is attributed to you. Anything Connect asserts about a prospect carries the source it was proved from. Both appear on the record and they are not mixed together.

## What happens to a row that fails

A failing row does not stop the import and is not silently dropped. It is reported back with the reason, so the correction you make is to a handful of rows rather than to the whole file.

**Unreadable or empty row** — Skipped and listed. Usually a trailing line or a merged cell in the source spreadsheet.
**No resolvable subject** — Rejected. A row with an address and nothing else does not describe an organisation Connect can research.
**Resolves to an existing customer** — Not imported as a prospect. It is reported as a match so you can see who it was, because prospecting somebody you already serve is the failure this check exists to prevent.
**Resolves to a prospect already on your list** — Merged into the existing record rather than duplicated; supplied fields fill gaps and do not overwrite evidence-backed ones.
**Address on the suppression or do-not-contact list** — Imported as a prospect, but not contactable. The suppression is shown with its origin and is not cleared by an import.

## After the import

1. Read the import summary before doing anything with the list.
   - Result: Rejected rows, customer matches and merges are all in one place; this is the only moment when they are easy to act on.
2. Let research run over the new rows.
   - Result: Qualification, the fit reason and contactability come from research, not from your file, so an unresearched import looks thin until this finishes.
3. Check the counts above the list against the number of rows you sent.
   - Result: The difference is exactly the rejections and merges in the summary. If it is not, the summary is the thing to trust.

Uploading the same file again is safe and is the normal way to add columns you did not have the first time. Matching happens per row, so the second pass merges rather than duplicates — and a field Connect has proved for itself is not replaced by an unevidenced value from your spreadsheet.

## Questions

### Will Connect verify the addresses in my file?

It records them with provenance and treats them as contactable, but it does not probe them and does not send test messages to prove they exist. The first real signal is a bounce or a reply, and a bounce feeds suppression the same way it would for any other address.

### Can I import a list and start outreach immediately?

The compliance check and sender readiness still run per message, so an import does not shorten the path to a send. What it skips is discovery, not the gates. Rows that arrive suppressed stay uncontactable.

### What happens to rows with no email at all?

They are kept. A researched prospect with no address is a legitimate record with a different next action — a call, a form, a person to find — and it is counted separately in the headline numbers above the list.

## Related

- [Prospecting in Connect](https://connectbyjbrh.com/docs/prospects/)
- [Connect does not guess email addresses](https://connectbyjbrh.com/docs/prospects/no-guessed-email/)
- [Evidence for a contact address](https://connectbyjbrh.com/docs/prospects/contact-evidence/)
- [Importing a prospect list, end to end](https://connectbyjbrh.com/docs/workflows/list-import/)
- [Resolving a prospect to an existing relationship](https://connectbyjbrh.com/docs/prospects/prospect-identity/)
- [Files and data in Connect](https://connectbyjbrh.com/docs/files-data/)

## What this page is based on

- `docs-source/sources/CHANNELS.md` §4 — prospecting and the evidence rule
- `docs-source/sources/GENERAL.md` §9 — the file service and the Data grid
- `backend/app/prospect_upload.py` (capability registry entry `prospect_upload`)
- Connect capability registry (`docs-source/facts.py`)
