Skip to content

Import from Concrete CMS

The Concrete import reads a Concrete CMS 9 database dump (no MySQL needed) and brings in pages, talent, posts, files, file sets, stacks, forms, menus, the footer, and templates. You can run it again later with a fresher dump: it updates what it imported and leaves anything you’ve edited here alone.

This is done by whoever runs the server, from the command line.

  1. Switch the site to the Studio Center theme (Pages & Design → Themes).
  2. Install and turn on the Forms, Shop, Location map, Google reviews, Search, and Talents extensions (Extensions). Forms, products, and map locations go into them.
  3. Get the dump (the .sql file from mariadb-dump), the old sitemap.xml, and, if you can, a copy of Concrete’s application/files folder.
pnpm import:concrete --dump dump.sql --sitemap sitemap.xml --dry-run

This writes nothing. It lists what would be imported, the type templates and menus it would make, notes about blocks that changed on the way, and any old address that wouldn’t work.

pnpm import:concrete --dump dump.sql --sitemap sitemap.xml --as you@example.com --files-dir /path/to/application/files
  • --as: an Administrator of the site (a Developer too, to bring in structured data).
  • --files-dir: stores files from the copy. Without it, the files are downloaded from the old site in the background.
  • --no-files: for a trial run; files are listed but not fetched. A later run with --files-dir (or without either flag) fills in the files those records are waiting for.
  • --offline: don’t look up simian.me and reel.io video links (they stay links instead of players).
  • --concrete-root <folder>: the Concrete installation folder. The Google Reviews API key and Place ID are copied to the Google reviews extension when its settings are empty; the key is never shown.
  • --with-staff: people in Concrete staff groups are added as invited people. Administrators become Administrators; other staff groups become Editors; customers, clients, and registered users are skipped. No passwords carry over, and pages are credited to their authors.
  • --send-invites: emails each invited staff member an invitation, once. You can add it now or on a later run. --resend-invites sends everyone who hasn’t accepted yet a new link. Staging sites never send email.
  • --with-form-submissions: form results from the last year (or each form’s own retention period) become entries under Extensions → Forms → Form submissions. Uploaded files come along only with --files-dir, and only people who manage extensions can download them. If an earlier run brought in submissions without their files, a later run with --files-dir adds the missing attachments to entries that are still there.
  • Talent and case studies as their own content types, with Talent Data beside each page’s content as on the old site,, with their own templates (Pages & Design → Templates → Content types). Posts use the Post template, which is also filled in from Concrete.
  • Testimonials as items of a Testimonial type, shown by content lists.
  • The main menu from Concrete’s header navigation, including links like “Auditions login”. Third-level pages follow their parent in the dropdown.
  • The footer with the social links and award badges.
  • The home page set in Settings, so it shows at the site’s address.
  • Old addresses keep working. Old page addresses redirect to the new ones, and old file links (/application/files/…, /download_file/…) lead to the files once they’ve arrived.

Templates, menus, and the home page setting are only filled in when you haven’t changed them here. The report says what it left alone. See Design to adjust them afterwards.

Store product pages become Products at the same addresses (/about/shop/products/…). Each has its picture, a summary that starts with its price, and the Shop product it sells. /about/shop/products stays the page that lists them, and product lists show Products, sorted as before. Inactive products keep their page but aren’t listed or sold.

Product sizes and other choice lists become Shop options. With --concrete-root, the import also sets up payments from Concrete’s store, but only while the Shop has no payment setup yet: PayPal Standard becomes “PayPal with just my email address”, with the same account and Live or Sandbox, and the currency comes across too. Tax is imported only when Concrete’s rate applied to whole countries; the report says when it didn’t. The report only says what was set and never shows the values.

After importing, check Extensions → Shop: set Countries you ship to so PayPal asks for a shipping address, and set tax if it applies.

Files people sent through forms (job applications, CVs, headshots, pitches) are never added to the media library, and their old addresses don’t work, even though Concrete kept them in its file manager. If a page on the old site showed or linked one of these files, it’s kept, and the import report lists it by file number so you can check it.

If an old page sits at a content type’s address (for example /talent/camera/search-camera/camera-actors), it stays and becomes that type’s listing page; the talent pages still open under it. Empty folder pages that only grouped talent pages (camera-women, camera-men…) aren’t imported, and their addresses lead to the listing page.

Comments (sc-cms comments are for staff discussing drafts), pages in Concrete’s trash, and, unless you ask for them with the flags above, staff accounts and form submissions.

Run the same command with a newer dump just before switching over. Pages you edited here since the last run are listed and left as they are.