Creating & Importing Clients
Clients are the foundation of every other feature in ClientCove. Most portals build the client list first, then layer projects, tickets, and contracts on top. This page covers both single-client creation and bulk CSV import.
Two Ways to Create Clients
| Method | When | Best for |
|---|---|---|
| Add Client modal | One client at a time | Manual onboarding, mid-stream adds |
| CSV bulk import | Many clients at once | Initial portal setup, migrating from another system |
Both paths produce identical client records — pick whichever matches your scale.
Add Client Modal
For single-client creation:
- Open Clients from the left sidebar
- Click the blue Add Client button (top-right toolbar)
- The Add Client modal opens
The modal collects:
- Client Name (required)
- Status (defaults to Active)
- Category
- Logo
- Description
- One initial address
You can always add more addresses, edit fields, or refine the client from the workspace Settings tab after creation.
Step-by-Step
1. Client Name (required)
Enter the company name. This becomes:
- The post title
- The display name in every dropdown that lists clients (project assignment, ticket filing, contract recipients)
- The URL slug at
/client/<slug>/
2. Status
Pick from the dropdown:
- Active (default)
- On Hold
- Inactive
- Plus any custom statuses you've added
The status drives the filter tabs on the Clients page and how the client appears in dashboard widgets.
3. Category
Optional. Pick a category term from the client-category taxonomy. If you haven't created categories yet, the dropdown will be empty — categories are managed from the gear icon next to the sidebar.
4. Client Logo
Optional. PNG or JPG, recommended size 250 × 125 px (a wide rectangle).
The logo appears:
- On the client card in Grid view
- On the client workspace header
- On generated invoices (if invoices are enabled and the logo is high enough resolution)
5. Description
Optional free-form notes. Plain text textarea — useful for context like "Acquired 2023" or "Primary contact: Jane Doe" — visible to anyone with client edit access.
6. Initial address
The Add Client modal exposes a single address block:
- Street
- City
- Country — radio buttons for United States / Canada / Other
- State (US) or Province (Canada) or free-text Region (Other)
- Zip / Postal Code
Use the workspace Settings tab later to add billing addresses, secondary offices, or other locations.
7. Save
Click Add Client. ClientCove:
- Creates the client post with the entered status and category
- Stores the logo, description, and address
- Closes the modal
- Adds the client to the visible list (no page reload needed)
You can immediately click the new client to enter its workspace.
Logo Upload
The logo upload zone supports drag-and-drop or click-to-browse:
- Upload — pick a PNG/JPG from your computer
- Remove (trash icon) — clear the current logo
- A live preview appears in the upload zone
- File is uploaded asynchronously; the preview updates on success
Maximum recommended dimensions: 250 × 125 px. Larger images are accepted but will be scaled in display contexts.
Address Setup
The country selection toggles which sub-fields are shown:
| Country | State/Province field | Postal field |
|---|---|---|
| United States | State dropdown (50 states + DC) | ZIP |
| Canada | Province dropdown | Postal Code |
| Other | Free-text Region | Free-text Postal |
Addresses can be flagged as Billing later from the workspace Settings tab. The first address is not auto-flagged as billing — you set that explicitly.
CSV Bulk Import
For many clients at once, use the CSV import path:
- From the Clients page, click the Import button (top-right)
- The Import Clients modal opens
- Upload a CSV file
- Choose duplicate handling
- Preview the parsed data
- Commit the import
Bulk import handles client records and their primary contact in a single CSV row — so you can onboard a client and create their first user account in one operation.
Import Workflow
The modal walks you through three steps:
Step 1: Upload
- File picker accepts
.csvandtext/csvMIME types - Pick the file from your computer
- Choose duplicate handling (see next section)
- Click Upload & Preview
Step 2: Preview
After upload, ClientCove parses the CSV and shows:
- Summary cards at the top: Total rows, New clients, Updates, Errors, Skipped
- A table of the parsed rows with each detected field (name, status, category, logo URL, description, address columns, contact email, contact name)
- Validation badges for each row: ✓ Valid, ⚠ Warning, ✗ Error
Review the preview to catch CSV formatting issues before committing.
Step 3: Commit
Click Import All. ClientCove processes each row:
- Creates new client posts
- Updates existing clients (when duplicates exist + Update mode is selected)
- Creates the contact user record (with
pending_invite = 1andactive = 0— the contact gets a registered account but no auto-email is sent until you explicitly invite them) - Reports results in step 3 with per-row outcomes
The result step shows ✓ created / ⟳ updated / × failed counts and a per-row log.
Duplicate Handling
When a client name in the CSV matches an existing client, you choose what to do:
Skip (default)
- Keep the existing client unchanged
- Don't import the duplicate row
- The row is reported as "Skipped" in the result
Update
- Update the existing client with the new values from the CSV
- Empty CSV columns leave existing fields untouched (won't blank them out)
- New fields in the CSV (logo URL, address) replace existing values
- The row is reported as "Updated" in the result
Pick Skip for safety on a first import; Update when you're refreshing a previously-imported list.
Preview & Commit
The preview step is a hard gate — nothing is written until you click Import All. Use it to:
- Verify column mapping (the CSV header row is matched against expected field names)
- Confirm row counts (catch off-by-one if your CSV has trailing blank rows)
- Spot validation errors before they create bad records
If the preview shows errors, cancel out, fix the CSV, and re-upload.
CSV Format Reference
A minimal CSV looks like:
client_name,status,category,description,contact_email,contact_first_name,contact_last_name
Acme Corporation,Active,Enterprise,Long-time partner,jane@acme.com,Jane,Doe
Globex Industries,Active,SMB,New onboarding,bob@globex.com,Bob,Smith
Recognized columns:
| Column | Required | Notes |
|---|---|---|
client_name | Yes | Becomes the post title |
status | No | Status name (e.g. "Active") — must match an existing status |
category | No | Category name — must match an existing category, or will create on the fly |
description | No | Free-form text |
logo_url | No | Public URL — file is downloaded and attached |
street, city, state, zip, country | No | Address columns |
contact_email | No | If present, creates a user record with this email |
contact_first_name, contact_last_name | No | Used for the user record's name fields |
Extra columns are ignored. Column order doesn't matter — only the header names.
After Creation
Once a client exists, click into their workspace to:
- Add more contacts (users) — see Contacts & Billing
- Set up additional addresses or designate billing
- Start projects, send contracts, file tickets — anything that links to this client
- Customize workspace tabs based on which features are enabled
Imported contacts arrive as Pending Invites. A user record is created with pending_invite = 1, but no email is sent automatically. To activate them, open the contact in the workspace Contacts tab and click Send Invite — they'll receive an account-setup email and can choose their own password.