Tutorials

Content Inventory Template for URL Owners and Review Dates

A practical content inventory template with URL provenance, owner and review fields, proposal tracking, a synthetic CSV, and an Atoms build prompt.

Start building for free
3 min readPublished
A website content owner compares imported URL records with their source, owner, review date, and proposed next action.
On this page

A content inventory template gives each URL an owner, a review date, and a recorded next action while preserving the source row that brought it into the inventory. Use the field map and synthetic CSV below to start with a small section of a site, then review each proposed change before it reaches a publishing workflow.

Download the Excel workbook · Example rows (CSV) · Application field specification (JSON)

What a content inventory records

A content inventory lists the content that exists and its identifying details. A content audit evaluates quality and decides whether content should stay, change, or be removed. Nielsen Norman Group recommends treating the inventory as the record that supports those later audit decisions; an inventory row by itself does not establish that a page is outdated or low quality. NN/G’s content inventory and audit guide describes common fields such as title, URL, owner or author, format, dates, and metadata.

For a working URL inventory, capture the import source, source row ID, raw URL, reviewed URL, canonical candidate, owner, last review date, next review date, proposal, and any action receipt. Keep the raw value even when a reviewer enters a cleaner URL. Treat a canonical candidate as a note to investigate, not an instruction to rewrite the live address.

Start with a scoped import

A website content owner compares imported URL records with their source, owner, review date, and proposed next action.

AI-generated editorial illustration.

Choose one subsection, content type, or user journey. Import URLs from a CMS export, sitemap, or spreadsheet and assign every source row its own stable import ID. A sitemap can help find URLs, while a CMS export can provide content fields; each source has different coverage, so preserve provenance.

Keep records separate until a person confirms a duplicate. For example, /Guide?ref=nav, /guide/, and /guide may differ in case, query string, or trailing slash. Store each imported string unchanged, record any reviewed URL separately, and link confirmed duplicates to one group without discarding either source row.

Review ownership and dates

Assign a named owner to each content item. Record the last review date and the next date the owner should check the page. A declared as-of date makes overdue status reproducible: a row is overdue when its next review date is earlier than that date. The date comparison does not judge quality; the reviewer records findings after checking the page, user needs, content standards, and relevant performance evidence.

Keep the first audit pass small enough for the assigned owners to complete. NN/G recommends choosing a scope that fits team capacity, tracking inventory details, and involving people who know the content. A simple spreadsheet can support that pass before a team builds a larger workflow.

Use proposals for updates and archives

Record “keep,” “update,” or “archive” as a proposal with a reason, proposer, date, and status. An archive proposal does not change a published page. If a separate publishing or deletion process completes the action, record its actor, date, outcome, and external receipt ID. When an update needs version approval, link the exact version to its existing content-approval owner and record; do not create a duplicate approval record in the inventory. See the separate content approval workflow.

Use an inventory app when multiple owners need assigned views, durable review history, and controlled exports. Atoms can build an app from a workflow brief; its documentation describes Atoms Cloud and connecting a Supabase project as backend options. Choose one backend for the application. For this workflow, specify the data model, app-user roles, saved review history, and export rules in the build prompt, then test each after generation. Atoms Cloud overview · Connect Supabase to Atoms · Supabase row-level security

The signed-in app users who own or review content are distinct from workspace builders. Enforce organization, owner, assigned-row, column, and export permissions on the server. Supabase documents row-level security policies as a way to restrict rows, but a project must enable and test policies for its own tables. For one-time spreadsheet migration, see Spreadsheet to web app.

Copy the build prompt into Atoms

Copy the complete prompt below into your Atoms project chat. It specifies the tables, duplicate handling, roles, synthetic acceptance case, and persistence checks.

text
Build a content inventory and review workflow for website content owners. The app must preserve every imported source row and its raw URL while allowing a reviewer to record a separately reviewed URL and a canonical candidate. Never merge URLs by changing path case, removing query strings, or removing trailing slashes without an explicit human decision. Keep confirmed duplicate grouping linked to the original import rows. When an update requires editorial approval, record the existing approval record reference and its exact content version in the proposal reason or external reference. Keep editorial version approval with that separate workflow; do not create duplicate editorial approval records in the inventory.

Create these related tables with stable IDs and typed fields: content_items (content_id, title, raw_url, reviewed_url, canonical_candidate, owner_user_id, format, topic, last_review_date, next_review_date, current_action); import_rows (import_id, source_name, source_row_id, raw_url, imported_at, content_id, duplicate_group_id); review_events (review_id, content_id, reviewer_user_id, reviewed_at, findings, proposed_action); action_proposals (proposal_id, content_id, action, reason, proposed_by, proposed_at, status); action_receipts (receipt_id, proposal_id, action, actor, completed_at, external_reference, outcome). Preserve imports and append review history instead of overwriting it.

Use two app roles: Content Owner can edit assigned records and propose keep/update/archive; Reviewer can review assigned records, set next review dates, and approve a proposal. Enforce organization, owner, assigned-row, column, and export permissions on the server. Workspace builders are separate from app users. Choose either Atoms Cloud or a connected Supabase project as the backend; do not configure both. If Supabase is selected, enable and test row-level security and permissions for every exposed table. Do not add payment or external publishing integrations.

Provide CSV import and export. Validate required fields, date-only review dates, and stable source IDs. Group only duplicates confirmed by a reviewer. An overdue filter must use a user-declared as-of date. An archive proposal must remain pending until an authorized publication or deletion workflow returns a separate receipt; this app must not publish or delete pages automatically.

Synthetic acceptance example: import row SRC-01 from “CMS export” with raw URL https://example.com/Guide?ref=nav and row SRC-02 from “Sitemap” with raw URL https://example.com/guide/. Preserve both strings exactly and create separate content records until a reviewer confirms whether they refer to the same page. Assign “Content Owner A,” set last review 2026-09-01 and next review 2026-10-01, and propose “update.” With an as-of date of 2026-10-06, show the review as overdue and the update as proposed, not completed. Export must include both import IDs, raw URLs, the owner, dates, proposal status, and an action-receipt field.

Save an edit as Content Owner, reload the app, sign out, and sign in as Reviewer. Verify that the saved value persists and that the Reviewer sees only assigned records. Test permitted and denied record, column, proposal, and export actions for both roles. Report every uncompleted check with its result; mark checks passed only after running them.

Copy the build brief and use it to create your version in Atoms.

Build a content inventory app

Content inventory sample CSV

The example retains two source rows with different raw URL strings. Reviewers can investigate whether they refer to the same page without losing provenance.

csv
import_id,source_name,source_row_id,raw_url,reviewed_url,canonical_candidate,content_title,owner,last_review_date,next_review_date,proposal,proposal_status,action_receipt_id
SRC-01,CMS export,88,https://example.com/Guide?ref=nav,,,Guide to setup,Content Owner A,2026-09-01,2026-10-01,update,proposed,
SRC-02,Sitemap,17,https://example.com/guide/,,,Guide to setup,Content Owner A,2026-09-01,2026-10-01,update,proposed,

Move the field map into an app

Use the downloaded workbook for the first review pass and the field specification to request an app review screen. A CMS export and sitemap are import sources, not proof that two URLs are equivalent. Keep both raw values until a reviewer decides how to group them.

Share this article
Made with Atoms

Your next idea starts here.

Turn what you learned into a working app or website.

Start building for free