How to bulk import content with CSV

Edited

Adding content one piece at a time works when you're getting started, but scaling your library requires a faster approach. The Bulk Import feature lets you upload a CSV file with URLs, titles, metadata, and more—then uses AI to automatically map your columns to Content Camel fields. You can review everything before confirming, and the system adds anything missing to your content organization, then handles transcoding and processing in the background.

Accessing Bulk Import

Bulk Import is an admin-only feature located in Team Settings.

  1. Click Settings in the left sidebar

  2. Under the Data section, click Bulk Import

The Bulk Import screen in Team Settings

Step 1: Upload your CSV

You'll see a drop zone where you can drag and drop your CSV file or click to browse.

  • Supported format: CSV files only (.csv)

  • Size limit: Up to 5,000 rows

  • Headers: Any column format works—the AI auto-detects your headers

Download the template

Click Download CSV template to get a pre-built CSV with the recommended columns:

Column

Description

URL

Link to the content (web page, PDF, video, etc.)

Title

Display name for the asset

Content Type

Type of content (e.g., Case Study, Whitepaper, Video)

Funnel Stage

Where it fits in the buyer journey (e.g., Awareness, Consideration)

Tags

Comma-separated tags

Product

Associated product

Industry

Target industry

Region

Geographic region

Description

Brief description of the content

Positioning

Positioning statement or notes

Import Action

"Link" (reference URL) or "Upload" (download and host)

You don't need to use all columns—include only what you have. You also don't need to name them this way. The template is a convenience, not a requirement: the AI reads your existing headers and works out what they mean.

AI analysis

After you select a file, the system analyzes your CSV using AI. You'll see a spinner with "Analyzing your CSV..." while it maps your columns and detects any issues. This typically takes 10–30 seconds.

Step 2: Review the mapping

The review screen has four sections to help you verify everything before importing.

The review screen showing the summary bar, column mapping, and row preview

Summary bar

Four stat cards show how your rows break down:

  • Valid (green) — Ready to import

  • Warnings (amber) — Will import but have minor issues

  • Errors (red) — Will be skipped

  • Duplicates (gray) — Repeat URLs within the file you uploaded

Column mapping

This table shows how the AI mapped each of your CSV columns to Content Camel fields. For each mapping you'll see:

  • CSV Column — Your original header name

  • Mapped To — The system field (editable dropdown)

  • Confidence — How sure the AI is: High (green, 80%+), Medium (amber, 50%+), or Low (red, under 50%)

  • Reasoning — The AI's explanation for its mapping choice

The expanded column mapping table showing confidence scores and reasoning

Columns are sorted lowest-confidence first so you see the ones needing attention at the top. If all columns are mapped with high confidence, the table collapses to a summary—click it to expand and review.

You can override any mapping using the dropdown. Available fields include URL, Title, Content Type, Funnel Stage, Tags, Product, Industry, Region, Positioning, Description, Status, and Import Action. Set a column to Unmapped to skip it entirely.

Values your workspace doesn't have yet

If your CSV contains Content Types, Funnel Stages, Tags, Products, Industries, or Regions that aren't in your workspace yet, a collapsible info bar tells you how many will be created. Expand it to see them grouped by field. They're added automatically when you run the import.

This bar is worth opening every time. It's the cheapest moment to notice that Case Studies is about to be created alongside the Case Study you already have.

Row preview

A paginated table showing your rows with their status, mapped data, import action (Link or Upload), and any issues detected. Error and duplicate rows have their action dropdowns disabled since they'll be skipped.

Confirm the import

At the bottom, you'll see the total count of items that will be imported. Click "Import N items" to proceed.

Step 3: Import progress

After confirming, the system processes your import in stages:

  1. Preparing items — Adding any new Content Types, Funnel Stages, or Tags your file introduced

  2. Items are being processed by the transcoder — Downloading, converting, and generating thumbnails

  3. Import complete — Everything is ready

A progress bar tracks the process. For large imports, this may take a few minutes. You can leave the page—the import continues in the background.

The completed import confirmation

Results

When complete, you'll see:

  • Success count — How many items were imported

  • Failed items — If any items failed, click to expand and see the source URL and error for each

  • New values created — Confirmation of any Content Types, Funnel Stages, or Tags added along the way

Click Done to return to the upload screen.

Import history

Below the wizard, you'll find a history table showing all past imports with their file name, status, item count, and date.

The import history table

To undo an import, click the trash icon on any row. This archives the imported items and removes any Content Types, Funnel Stages, or Tags that the import created. The row stays in the table with a DELETED status so you keep a record of what happened.

Two things you may notice in this table:

  • Rows you imported with the "Upload" action appear as a second entry ending in -uploads. Link rows and upload rows are processed as two separate jobs, so a nine-row file can show up as one job of six and one job of one. The success count on the final screen counts the link job only—check the history table for the full picture.

  • Website imports appear here too, listed as web-ingest:yourdomain.com. Those come from the content crawl we run during onboarding, not from a CSV.

Updating content that's already in your library

Bulk Import always creates new assets. It never updates or overwrites existing ones.

This is the single most important thing to know before you re-upload a spreadsheet. If you import a URL that's already in your library, you get a second asset pointing at the same URL—not an updated version of the first. Duplicate detection only looks for repeated URLs within the file you're uploading; it does not compare against content you already have.

So if your goal is to change metadata on content that's already in Content Camel, use one of these instead.

Option 1: Edit a single asset

Open the asset from your library and click any field to edit it in place—title, description, positioning, content type, funnel stage, product, industry, region, and tags are all editable directly on the asset detail page. Best when you're fixing one or two things.

Option 2: Bulk-edit many assets at once

This is the right tool for "I need to re-tag 60 assets."

  1. Go to your content library

  2. Select the assets you want to change using the checkboxes

  3. In the action bar that appears, click Categorize

  4. In the Organize Assets panel, expand Funnel Stage, Content Type, or Tags and choose the values you want to apply

  5. Save

Selecting multiple assets reveals the bulk action bar

The Organize Assets panel applying content organization to three selected assets

A few things to know:

  • Bulk edits are additive. The values you pick get added to every selected asset. This is for applying a shared label across a group, not for clearing or replacing what's already there—remove unwanted values on the individual asset.

  • Only the fields your workspace uses are shown. If you haven't enabled Products, Industries, or Regions in Content Organization, they won't appear here.

  • You can also Delete or Create Collection from the same action bar.

Option 3: Re-import, then undo the original

Use this when your spreadsheet is the source of truth and the changes are too extensive to redo by hand.

  1. Import the corrected CSV as a new import

  2. Confirm the new assets look right

  3. Go to Import History and click the trash icon on the original import

Undoing the original archives its assets, so you're left with just the corrected set.

⚠️ Two cautions before you do this. Undoing an import also removes the Content Types, Funnel Stages, and Tags it created—so if you've started using any of them elsewhere, check before undoing. And the new assets are genuinely new: view counts, share links, and engagement history stay with the old assets and do not carry across.

Which one should I use?

Situation

Use

Fixing one asset's title or description

Edit the asset directly

Adding a tag or funnel stage to a group of assets

Bulk Categorize

Removing a value from an asset

Edit the asset directly (bulk edit only adds)

Wholesale metadata rewrite driven by a spreadsheet

Re-import, then undo the original

The content itself changed at the source URL

Nothing to do—linked assets always point at the live URL

Advanced options

Link vs Upload, per row

The Import Action column controls how each piece of content is stored, and you can set it differently on every row:

  • Link (the default) — Content Camel stores a reference to the original URL. The asset always reflects whatever is live at that address. Best for blog posts, landing pages, and anything you update at the source.

  • Upload — Content Camel downloads the file and hosts its own copy. The asset is frozen at the version you imported. Best for PDFs, datasheets, and anything you need to stay fixed—including content behind a URL you may not control forever.

If you leave the column out entirely, everything is imported as Link.

Multi-value fields

Content Type, Funnel Stage, Product, Industry, Region, and Tags all accept multiple values in a single cell. Separate them with commas and quote the cell so your spreadsheet doesn't split it into separate columns:

URL,Title,Funnel Stage,Tags
https://example.com/guide,Buyer's Guide,"Awareness, Consideration","gated, featured"

How the AI matches your values

Two different behaviors, worth knowing so you can predict the result:

  • Tags are matched exactly, ignoring case only. Gated matches your existing gated tag. Gated Content does not—it becomes a new tag.

  • Content Type, Funnel Stage, Product, Industry, and Region go through AI matching, which fixes casing, whitespace, and obvious typos. case study resolves to your existing Case Study. Genuinely new values are flagged for creation and shown to you before you confirm.

This is why the review step matters: it's your chance to catch a value that should have matched but is about to create a near-duplicate.

How duplicates are detected

Before comparing URLs, the system normalizes them—so these three all count as the same row:

https://www.example.com/post/
https://example.com/post
https://example.com/post?utm_source=newsletter&utm_campaign=q3

Specifically it lowercases the host, drops www., removes trailing slashes and anchors, sorts the remaining query parameters, and strips common tracking parameters (utm_*, gclid, fbclid, mc_cid, ref, source, and similar). The first occurrence is imported; later ones are marked duplicate and skipped.

Remember that this comparison happens within your file only—a URL already in your library will not be flagged. See Updating content that's already in your library above.

What happens to problem rows

Status

Cause

Result

Error

Missing URL, malformed URL, or a non-http(s) protocol

Skipped—not imported

Duplicate

Same normalized URL as an earlier row in the file

Skipped—not imported

Warning

Minor issues

Imported

Valid

No issues found

Imported

A missing Title is not an error. If you leave it blank, the title is generated from the page's own metadata when the URL is fetched—so a URL-only CSV is a perfectly valid import.

Overriding the AI

You are never locked into the AI's interpretation:

  • Change any Mapped To dropdown to re-point a column at a different field

  • Set a column to Unmapped to ignore it—useful for internal spreadsheet columns like owner, review date, or record ID that have no Content Camel equivalent

  • Change the Import Action on individual rows in the preview table

  • Click Cancel to discard the analysis and start over with a corrected file

Nothing is written to your library until you click Import N items.

Troubleshooting

The import failed during analysis. Try uploading the file again first—analysis calls an AI service and an individual run can fail. If it keeps failing on the same file, import it with just URL, Title, and Description, then apply Content Type, Funnel Stage, and Tags in bulk afterward using Categorize. That gets your content in while sidestepping the value-matching step.

Fewer items imported than rows I confirmed. Check whether some rows used the Upload action—those are dispatched as a separate -uploads job and are counted separately in Import History.

An imported asset has no thumbnail yet. Transcoding runs in the background after the import completes. Give it a few minutes.

I imported the same content twice. Delete the duplicate assets from your library, or undo the whole import from Import History and re-run it with a cleaned file.

Best practices

  • Start with the template — Download the CSV template to see the expected format, then adapt it to your data

  • Include URLs — Each row should have a URL pointing to the content. The system fetches and processes the content from there

  • Review low-confidence mappings — The AI is usually right, but double-check amber and red confidence columns before importing

  • Use "Link" vs "Upload" deliberately — "Link" stays current with the source; "Upload" freezes a copy in Content Camel

  • Open the new-values bar before confirming — It's the cheapest moment to catch Case Studies about to be created alongside your existing Case Study

  • Import once, then organize — It's normal to import with minimal metadata and refine it afterward with bulk Categorize

  • Clean your CSV first — Remove empty rows and ensure URLs are valid before uploading

Have questions?

If you have any questions about bulk importing content, reach out to our support team. We're here to help you get your content library set up quickly.