Grid mode edits the same rows as Quick and Form mode. It just shows them all at once. Quick and Form are single-record views, so they switch off automatically once a submission has more than one row.
Grid mode is available on every plan. What your plan limits is how many records one submission can create. The limit is checked when you submit for review or create the records. A larger batch still saves as a draft, and the builder tells you to remove rows to get under the limit. See Plans and limits.
Steps
1
Start a new batch
Open your workspace and click Build URL. When the button names a taxonomy (Build URL · Campaign URL Builder), it opens that one directly; to build for a different taxonomy, open the caret next to it and pick one. When it names none, clicking it opens the same picker. The builder opens with one empty row, in Quick mode unless you last picked another fill mode. If the workspace also has taxonomies that produce no links, the button may read New record instead; it opens the same picker.
2
Switch to grid mode
Use the Quick / Form / Grid switch in the header to select Grid. You can switch manually at any time. The builder also moves to Grid on its own as soon as the submission has two or more rows, since Quick and Form cannot show a multi-row submission.
Screenshot coming soon: the grid mode layout.
3
Match your spreadsheet column order
Paste maps cells by position, not by header name: the leftmost spreadsheet column lands in the leftmost visible grid column where you start the paste, and so on. Computed columns are hidden by default, so with the Computed toggle off, the visible columns are exactly the ones you fill in (
utm_source, utm_medium, utm_campaign, and so on). Arrange your spreadsheet in that order and leave computed values out of it.4
Copy and paste the block
In your spreadsheet, select the rectangle of cells you want, copy it, click the top-left input cell in the grid, and paste with Ctrl/Cmd+V. Each pasted line becomes one row, and each value fills left to right by column position. If the paste is taller than the current grid, the builder adds the extra rows for you.
Screenshot coming soon: pasting a block into the grid.
5
Add, duplicate, or generate rows
Click Add row in the toolbar to append a blank row, or right-click a row and choose Insert row above or Insert row below. To copy rows, select them (click the row-number cells, or use Cmd/Shift-click), right-click, and choose Duplicate row (it reads Duplicate 3 rows for a selection). Use the fill handle (drag the small square at the corner of a selected cell) to copy a value down a column. To fan one row out into every combination of a few values, see Generate combinations.
6
Reorder or delete rows
Drag a row by its row-number handle to reposition it when the final record order matters. To remove rows, select them, right-click, and choose Delete row (it acts on the whole selection). Deleting rows leaves the rest of the submission intact.
7
Check the computed fields
Turn on the Computed toggle in the toolbar to show the computed columns (
tagged_url, the concatenated campaign name, and so on). They are read-only and update as you type the inputs they depend on. The values you see are a live preview. Terminus Hub recomputes them when you save.8
Save as a draft
Click Save as draft. Drafts save even if some rows still have validation errors, so you can stash a large batch and come back to fix it. A draft you reopen shows its errors right away: cells with problems are flagged, and the error-count pill tells you how many remain.
9
Submit or create the URLs
When every row is valid, use the primary button. If this taxonomy requires review in your workspace, it reads Submit for review and moves the submission to review. If review is not required, it reads Create URLs (or Update URLs when the rows edit existing records) and creates them directly. Taxonomies that produce no links say records instead of URLs. Advancing past draft requires all rows to be valid, and when the rows become records the short URLs go live. Approval and reviewers are covered in Review and approve submissions.
Round-trip rows through a CSV
In Grid mode, the toolbar next to Save as draft has two buttons for editing rows in a spreadsheet and bringing them back.- Export CSV downloads the grid’s rows. The file starts with three guidance rows: a “do not edit” warning, the field names, and a row of field handles starting with
_terminus_id. Leave that handle row alone, because import finds your columns through it. Computed fields are left out. Exporting an empty grid gives you a blank template for bulk entry. Export works even on a submission you can no longer edit. - Import CSV loads an edited file back into the grid. Columns are matched to fields by handle, not by position, and columns that match no field are ignored. After a confirmation (Replace grid with CSV?), the file’s rows replace every row in the grid.
_terminus_id column is how a row keeps its identity. A row whose _terminus_id matches a row in the grid updates that same record; leave it blank to add a new row. Problems in the file do not stop the import. An ID that matches no row in the grid, or an ID already used by an earlier row in the file, is imported as a new record, and the summary names those rows. A dropdown value that is not a valid option is cleared, and its cell shows the error (for example, 'emal' is not a valid option). A date is accepted when Terminus Hub can read it: 2026-01-15, 2026/01/15, March 5, 2026, and 15-Jan-2026 all work. An all-numeric date like 01/02/2026 is not read in your browser’s date format, because a file does not say whether it means January 2 or February 1, so use 2026-01-15. A date that can’t be read keeps its text, and once you save, its cell says why so you can fix it. See Typing, pasting, or importing a date. A file whose headers match no editable field handle is refused, because there is nothing to import.
Generate combinations
When a batch is every mix of a few values (three sources times four regions, say), let the grid build it. Fill in one row as the template, right-click one of its editable cells, and choose Generate combinations. In the panel, the field you right-clicked is the first field to vary. Click Add a field to vary for more. For a dropdown, tick the options to include (or Select all). For a text field, enter one value per line, or paste a column. Other fields are copied from the template row as they are. The panel previews the rows and counts them, up to 500 at a time. Skip combinations already in the grid is on by default, so rows you already have are not duplicated. Click Generate. The template row expands into one row per combination.Gotchas
- Column order is the contract when you paste; handles are the contract when you import. A paste lands each value by position, so if your sheet puts the destination URL before the launch date but the grid orders them the other way, values land in the wrong cells and validation fails. Rearrange the sheet (not the grid) before pasting, or use Import CSV, which matches by handle.
- Show computed columns only after you paste. With the Computed toggle on, computed columns sit among the input columns and take up paste positions, but they are read-only, so the values that land on them are dropped and the columns after them shift. Paste with the toggle off.
- Large pastes take a moment to settle. Each row is computed and validated, so a big batch with a multi-level computed chain (for example campaign name then tagged URL then short URL) shows a brief pause after paste while the computed columns catch up.
- Grid mode stays on after bulk entry. Once you are in Grid, deleting rows down to one does not switch you back to Quick or Form automatically. Use the mode switch in the header if you want to return to a single-record view.
- Slug collisions surface on save, not while you type. A
short_urlslug is checked for format as you type, but its uniqueness is confirmed when you save or create the URLs. For how slugs are generated and activated, see the Short URL field. - Over the record limit, the draft is safe. If your plan’s records-per-submission limit refuses the batch, nothing is lost. Remove rows (or split the batch across submissions), then create the URLs.