How to merge product title and description into a combined text column
- Step 1Export the product CSV — Download from your PIM, CMS, or marketplace. You need Title and Description as separate columns — that's what this tool combines.
- Step 2Drop the file onto the merger above — Headers become checkboxes; delimiter and encoding are auto-detected. A description full of commas won't break the load because the parser is quote-aware.
- Step 3Tick the Title column, then the Description column — Tick order is the join order. Tick Title first so the combined text reads title-then-description, which most embedding models prefer for relevance weighting.
- Step 4Set the separator — A single space for plain concatenation,
|or—for a readable boundary, or paste a literal newline into the field if your pipeline splits on\n. Whatever you type goes in verbatim. - Step 5Name the column — Default is
merged; rename tofull_text,content, orembedding_inputto match your pipeline's expected field. Cannot be blank. - Step 6Merge and feed downstream — Click Merge columns; Title and Description vanish and the combined column appears at the front. Download is suffixed
.merged-cols.csv. If descriptions contain HTML, strip it first or as a follow-up — the merger leaves markup intact.
Controls the text merger actually exposes
Exactly these controls. There is no prefix/label injection, no HTML stripping, no truncation, and no drag-reorder in the browser UI.
| Control | Behaviour for product text | Default |
|---|---|---|
| Column checklist | Tick Title + Description (+ more). Tick order = join order. No drag-reorder | Nothing ticked |
| Separator | Space, | , — , or a pasted literal newline. Inserted verbatim | Single space |
| New column name | Header for the combined field. Rename to full_text. Cannot be blank | merged |
| Insert position | Browser tool puts the combined column first (position 0). API/orchestrator expose insertAt | 0 (front) |
Separator choices for indexing / embedding
Common separators and what they're good for when building an embedding/index input field.
| Separator | Output shape | Good for |
|---|---|---|
| space | Title Description text... | General embeddings; most models treat it as continuous text |
| | Title | Description text... | Human-readable index documents; clear field boundary |
— (em dash) | Title — Description text... | Display-style concatenation for faceted search snippets |
| literal newline | Title then line break then Description | Pipelines that split sections on \n (re-quoted automatically) |
Cookbook
Before/after rows from product feeds bound for search and embedding pipelines. Output is exactly what the tool emits — markup and whitespace are not touched.
Title + Description into one text field
ExampleThe core case. Tick Title then Description, space separator, name it full_text. Source columns are removed; full_text leads the file.
Input: Title,Description,SKU Wool Beanie,Warm merino beanie for winter,WB-01 Tick: Title, Description Separator: " " New name: full_text Output (source columns removed, full_text first): full_text,SKU Wool Beanie Warm merino beanie for winter,WB-01
Readable boundary with a pipe separator
ExampleFor a human-readable index document, a | separator marks the title/description boundary clearly.
Input: Title,Description Wool Beanie,Warm merino beanie for winter Tick: Title, Description Separator: " | " Output: merged Wool Beanie | Warm merino beanie for winter
Description with commas and quotes is preserved
ExampleThe parser is quote-aware. A description containing commas and quotation marks stays in one field, and the combined output is re-quoted so it survives re-import.
Input: Title,Description Wool Beanie,"Warm, soft, ""buttery"" merino" Tick: Title, Description Separator: " " Output (whole field re-quoted, inner quotes doubled per RFC 4180): merged "Wool Beanie Warm, soft, ""buttery"" merino"
Description with an embedded line break survives
ExampleMulti-paragraph descriptions that were correctly RFC-4180 quoted keep their line break in the combined field. No cell-length limit applies.
Input (Description has a real newline inside the quoted field): Title,Description Wool Beanie,"Warm merino beanie. Ideal for winter hikes." Tick: Title, Description Separator: " " Output (line break preserved inside the re-quoted field): merged "Wool Beanie Warm merino beanie. Ideal for winter hikes."
HTML in the description is NOT stripped
ExampleMarketplace descriptions often contain HTML. The merger leaves it intact — strip it before or after if your embedding model doesn't want tags.
Input: Title,Description Wool Beanie,"<p>Warm merino beanie</p>" Tick: Title, Description Separator: " " Merger output (tags preserved): merged "Wool Beanie <p>Warm merino beanie</p>" To remove tags, run CSV Find & Replace (regex <[^>]+> -> "") before feeding the column to your embedding model.
Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
You want a `Title:` label prefix on each value
Not supportedThe merger can only join columns that exist — it cannot inject a constant string like Title: . Workaround: add a constant column (a spreadsheet column filled with Title:) and include it in the merge, or add the prefix afterwards with CSV Find & Replace using an anchored pattern.
Description contains HTML markup
PreservedHTML tags are copied verbatim — the merger does not strip them. If your embedding model or search index wants clean text, remove tags with CSV Find & Replace (regex <[^>]+> → empty) before or after the merge.
Description has commas, quotes, or line breaks
SupportedThe parser is RFC-4180 quote-aware, so embedded commas, doubled quotes, and quoted newlines stay inside one field, and the combined value is re-quoted on output. No special handling needed — the round-trip is correct as long as the source was validly quoted.
Very long combined cell
SupportedThere's no cell-length limit imposed by the merger — concatenating long descriptions works. The only ceiling is the tier file-size limit (2 MB free, 100 MB Pro). Your downstream embedding model, however, has a token limit, so chunk long text before embedding if needed.
Source Title and Description columns removed
By designAfter merging, only the combined column remains — Title and Description are gone. If you need the original columns too (e.g. to show the title separately in search results), duplicate them before merging; the tool has no keep-originals option.
Combined column lands at the front
ExpectedThe browser tool inserts the merged column at position 0, so the file becomes full_text, SKU, .... Reorder with CSV Column Reorder if your ingestion maps columns by position. The API exposes insertAt.
Empty Description leaves a trailing separator
By designA product with a title but no description produces Wool Beanie (trailing space) or Wool Beanie | with a pipe — there's no skip-blank logic. Trim trailing whitespace with CSV Whitespace Trimmer, or collapse trailing pipes with CSV Find & Replace.
Free tier limit on a large catalogue
Upgrade requiredThis is a Pro tool; free tier caps at 2 MB / 500 rows. A catalogue of thousands of long descriptions needs Pro (100 MB / 100,000 rows). Split with CSV Row Splitter to test on free tier first.
Frequently asked questions
Does this work for long description columns?
Yes — the merger imposes no cell-length limit, so long marketplace descriptions concatenate fine. The only ceiling is the tier file-size limit (2 MB free, 100 MB Pro). Note your downstream embedding model has its own token limit, so chunk very long combined text before embedding.
Can I add a label prefix like `Title: ` before each value?
Not directly — the merger can only join columns that already exist; it can't inject a constant string. Either add a constant column (filled with Title: in a spreadsheet) and include it in the merge, or add the prefix afterwards with CSV Find & Replace.
What separator works best for vector embedding?
A single space is the common default — most models treat the combined text as continuous prose. | or — give a clearer field boundary if you want a human-readable index document. Check your embedding model's input-format guidance; the separator is inserted exactly as typed.
Will HTML in the description be stripped?
No — the merger preserves markup verbatim. If your model or index wants plain text, strip tags with CSV Find & Replace using the regex <[^>]+> → empty, either before or after combining the columns.
What happens to commas and quotes inside the description?
They're preserved. The parser is RFC-4180 quote-aware, so a description with commas, doubled quotes, or a quoted newline stays inside one field, and the combined value is re-quoted on output so it re-imports cleanly.
Are the Title and Description columns kept after merging?
No — they're removed and replaced by the single combined column. If you need the title separately (e.g. to display in search results), duplicate the columns before merging, because the tool has no keep-originals toggle.
Where does the combined column appear in the file?
At the front (position 0) in the browser tool, so the output is full_text, SKU, .... Reorder with CSV Column Reorder if your ingestion maps by position. The API accepts an insertAt parameter.
Can I control whether the title or description comes first?
Yes — by tick order. Tick Title before Description for title-then-description (the usual choice for relevance weighting), or reverse the tick order to lead with the description. There's no drag-reorder.
What if some products have no description?
You get a trailing separator — Wool Beanie or Wool Beanie | — because there's no skip-blank option. Trim with CSV Whitespace Trimmer or collapse trailing separators with CSV Find & Replace.
Is my product copy uploaded anywhere?
No. Parsing and merging run entirely in your browser via PapaParse. Proprietary titles and descriptions never reach a server — only an anonymous usage counter is recorded if you're signed in.
How large a catalogue can I combine at once?
Free tier: 2 MB / 500 rows. Pro: 100 MB / 100,000 rows. For a bigger catalogue, split with CSV Row Splitter, combine each chunk, and recombine the chunks with CSV Merger.
Can I run this in an embedding/indexing pipeline?
Yes. GET /api/v1/tools/csv-column-merger returns the schema; pair the @jadapps/runner once and POST { columns: ["Title","Description"], separator: " ", newHeaderName: "full_text", insertAt: 0 } with your CSV to 127.0.0.1:9789/v1/tools/csv-column-merger/run. It runs on-device, so proprietary copy stays local. Strip HTML as a separate pipeline step.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.