We build and look after Shopify stores for clients. Every few weeks the same job came back. A client wanted size guides, spec sheets or a vendor directory on the storefront. Metaobjects were the right tool for it. And then someone on our team spent hours in Content > Metaobjects, adding entries one at a time, picking products from a modal, uploading images one by one.
Metaobjectify came straight out of that work. This isn’t a launch announcement. It’s why the job kept hurting, the three decisions that shaped the app, what we deliberately left out, and what we’ve learned since it went live on the Shopify App Store in August 2026.
The job that kept coming back
Metaobjects are one of the best things Shopify has added for structured content. A size guide becomes one entry that every relevant product points at. A spec sheet has typed fields instead of a table pasted into a description. A vendor directory is a definition, not a page someone maintains by hand.
The problem was never the model. It was getting data into it. The content almost always existed already, in a supplier spreadsheet, an old page, a PIM export, a client’s Google Sheet. The admin’s answer to “here are 200 rows” is 200 visits to Add entry. Each one means filling the fields, searching a picker for the right product, uploading or choosing an image, saving, and going back. Then the client sends a corrected spreadsheet, and the question becomes which of those 200 entries changed.
The options we had
None of the alternatives fit the job well.
The admin. Fine for ten entries. Slow and error-prone for two hundred, and no way to see what changed between two versions of a spreadsheet.
General-purpose import apps. There are good ones, built to move every kind of store data: products, orders, customers, and metaobjects among them. For a client who needed exactly one thing, loading and maintaining metaobject entries from a spreadsheet, that was more tool than the job needed, and it still meant learning that tool’s file format.
Scripts against the GraphQL Admin API. This is where developers end up, and it’s more work than it looks. Reference fields need Shopify’s internal IDs, so every product handle in the spreadsheet has to be looked up first. Image URLs have to be uploaded as Shopify files before a file field can point at them. The script has to respect rate limits, read the errors buried in successful responses, and cope with a run that stops halfway. And there’s no review step: by the time you see a problem, it’s already in the store. Doing that once is fine. Rewriting it for every client isn’t.
Three decisions that shaped the app
Handles and URLs, never GIDs
The people who fill in these spreadsheets know a product as slim-fit-chinos, the last part of its URL. Nobody knows it as gid://shopify/Product/8123456789012, and nobody should have to. So Metaobjectify takes product handles for product fields, collection handles for collection fields, and direct file URLs for image and file fields, and does the translation into Shopify’s IDs itself. (We wrote up why GIDs break imports separately.)
Check every row before writing anything
There’s no undo for a metaobject import. Overwritten values are gone; deleted entries can’t be restored. So the review comes first: every row is checked, and missing required fields, references that don’t match anything in the store, and values in the wrong format are flagged row by row. Nothing is written to the store until you’ve seen that list and chosen to import.
One file creates and updates
The handle decides what happens to each row. If it matches an existing entry, that entry is updated in place. If it’s new, a new entry is created. One spreadsheet can do both, which means the natural workflow (export, edit some rows, add a few, import) just works, with no separate “create” and “update” files to keep in sync.
What we left out on purpose
Metaobjectify does one job — moving metaobject data in and out of Shopify safely — rather than trying to be a general data platform.
That line is on our About page, and it’s the filter for every feature request. It’s why the app doesn’t import products or orders, and why it doesn’t try to be a content editor. It reads a CSV, checks it against your definition and your store, writes the entries, and keeps a record of every job. The narrower the job, the easier it is to make each step trustworthy.
What we’ve learned since launch
Most failed rows are duplicate handles. Not wrong types, not bad references: two rows with the same handle in one file, usually from a copied row or a merged spreadsheet. We now say it on the How it works page, and it’s the first thing we tell anyone whose import had failures. Sort the handle column before you upload, and duplicates sit next to each other.
Start with an export, every time. The single most useful habit is exporting the definition before building an import file, even when the definition has no entries yet. The export is the template: exact columns, handle format, field structure. That’s why exports are unlimited on every plan, including Free.
The time saved is real. One merchant put it in an App Store review better than we could:
Before using this app, updates that took me 2–3 hours to do manually can now be completed in around 30 minutes. Strato Dynamics, Shopify App Store review
What’s next
We’re still running client stores, and that’s where the roadmap comes from. Next up are bulk editing tools and more validation rules. Scale subscribers get early access to new features as they ship.
If you’re importing something we don’t handle well yet, tell us what it is and where you got stuck. We read every message: contact us. And if Metaobjectify has saved you an afternoon, a review on the Shopify App Store helps other merchants find it.