Skip to main content
Migration guide · product data

ACF fields don't move to Shopify. Their data does.

On WordPress, a custom field is a row in the database and a box in the editor. Shopify keeps the same two things apart: a metafield definition that you create, and values that you import into it. This guide maps every Advanced Custom Fields type to its Shopify counterpart, explains how the values are stored on each side, and turns your own field group export into Shopify definitions.

256metafield definitions per resource type for the merchant; each app gets its ownShopify limits2
40fields per metaobject, the ceiling for a repeater's sub-fieldsMetaobject limits3
128items in a list metafield; 1,024 for metaobject referencesShopify limits2
25storefront filters per store, metafields includedStorefront filtering6

In brief

  • ACF field groups cannot be imported into Shopify. Each field is recreated as a metafield definition with a matching type, and only then are the values imported.8
  • Shopify allows up to 256 metafield definitions per resource type for the merchant, and standard definitions do not count towards that limit.2
  • ACF repeaters and flexible content become metaobjects: up to 40 fields per metaobject definition and up to 1,000,000 entries per definition.3
  • ACF saves dates as Ymd, true/false as 1 or 0, and checkboxes and relationships as serialized PHP arrays, so every value needs converting before Shopify will accept it.111213
  • The Shopify product CSV can carry most simple metafield types, but not file references, rich text, JSON, single metaobject references or variant metafields.5

Two halves of one move

Take one product from a clothing store: a fabric note, a launch date, an organic flag and a size chart built with a repeater. In WordPress all of it lives in wp_postmeta, one row per value, next to the row that tells ACF which field the value belongs to.16 On Shopify the same product carries typed metafields, and the size chart becomes a list of metaobject entries.

The _fabric row only tells ACF which field a value belongs to, and is not migrated. The repeater's row count (3) and its numbered keys become three metaobject entries.

That gives you two separate jobs. The structure, meaning the field groups, is rebuilt once by hand or by script as Shopify definitions. The values are exported, converted and imported for every product. Mixing the two up is how custom fields get lost: an import that writes values to a metafield with no definition behind it may succeed, but the field does not appear in the product editor, cannot be validated, and cannot be connected to the theme without code.

Every ACF field type, mapped

Shopify's list of metafield types has grown well beyond the twenty-odd types most guides still describe. It now includes measurement types such as temperature and duration, references to articles and orders, and mixed_reference, which can point at metaobjects of more than one definition.1 For ACF fields, the useful subset is below.

ACF fieldShopify typeWhat changes
Basic
Textsingle_line_text_fieldCharacter limits move to a min/max validation.4
Text Areamulti_line_text_fieldLine breaks are kept. There is no list version.1
Number, Rangenumber_integer or number_decimalChoose by the field's step. Range bounds become min/max.
Emailsingle_line_text_fieldNo email type. Add a regex validation if it matters.4
URLurlCan be restricted to certain domains with allowed_domains.4
PasswordDo not migrateA storefront data field is the wrong place for a secret.
Content
Imagefile_referenceACF stores the attachment ID,16 which means nothing to Shopify. Upload the file to Shopify first, then reference it. Limit the type to images.4
Filefile_referenceLeave the file type validation empty to accept any file.4
Gallerylist.file_referenceAt most 128 files per list.2
Wysiwygrich_text_fieldShopify rich text is a structured format, not HTML: the HTML has to be converted, and embedded images and shortcodes do not survive. It cannot be imported by CSV.5
oEmbedurlStore the URL. The theme renders the embed.
Choice
Select, Radio, Button Groupsingle_line_text_fieldWith a choices validation of up to 128 values.2
Checkbox, multi-selectlist.single_line_text_fieldACF saves these as a serialized PHP array,23 so unpack it first. For filters with labels or swatches, a list of metaobject references is the better fit.
True / FalsebooleanStored as 1 or 0 in WordPress,12 written as true or false.
Date and colour
Date PickerdateAlways saved as Ymd, such as 20260315,11 written as 2026-03-15.
Date Time Pickerdate_timeSaved as Y-m-d H:i:s with no time zone.22 Decide which zone it meant before converting, or every launch time moves by hours.
Time Pickersingle_line_text_fieldShopify has no time-only type.
Color PickercolorShopify's colour type takes a hex value.1 Colours saved with transparency lose it.
Relational
LinklinkShopify's link type holds a URL and its text, like ACF's.1
Post Object, Relationshipproduct_reference, page_reference, article_referencePick by what the field points to, and use the list version for several. Relationships are serialized arrays of post IDs,13 which must be mapped to the new Shopify IDs after import.
Taxonomycollection_referenceFor product categories. Tags have no reference type, so they become text.
Page LinkurlOld WordPress URLs must be rewritten to their Shopify addresses.
UserNo equivalentShopify staff are not data you can reference. Store a name as text.
Google Mapjson or a metaobjectA metaobject with address, latitude and longitude fields is easier to edit than JSON.
Layout
GroupOne metafield per sub-fieldWe flatten groups into prefixed keys: they stay in the CSV and work with dynamic sources.
Repeaterlist.metaobject_referenceOne metaobject definition, one entry per row. Below.
Flexible Contentlist.mixed_referenceOne metaobject definition per layout.1
CloneThe cloned fieldsClone values are saved as ordinary individual fields, so map what was cloned.24
Tab, Accordion, MessageNothingEditor layout only. They hold no data.

Convert your field groups

In WordPress, open ACF's export tool, export the field groups attached to products, and paste the JSON below. You get the Shopify type for every field, what to watch out for, and the GraphQL to create the definitions. The converter runs in your browser, so nothing you paste is sent anywhere.

Fields read0
Metafield definitions0
Metaobject definitions0
Need a decision0
FieldACF typeShopifyKey
GraphQL Admin API

            

Treat the output as a first draft. It suggests the type a field's data needs, but whether a fabric note should be free text or a fixed list depends on how you want to filter it. That decision is worth making now, before 2,000 products are imported into the wrong shape.

Repeaters and flexible content

A repeater is the field type that makes people put off this part of a migration, and it maps more cleanly than its reputation suggests. ACF stores a repeater as numbered keys, size_chart_0_size, size_chart_1_size and so on, with the row number in the middle of the key.14 On Shopify, the sub-fields become a metaobject definition, each row becomes an entry, and the product holds a list that points to its entries in order.1

LimitValueWhat it means for a repeater
Fields per metaobject definition40A repeater with more sub-fields has to be split.3
Entries in a metaobject reference list1,024Rows per product. Other list types stop at 128.2
Entries per definition1,000,000Across the whole store. It was 64,000 below Plus until October 2025.10
Metaobject definitions128 / 256Per store, created by the merchant: 128 below Plus, 256 on Plus.3

Before creating one definition per repeater, check whether the rows are really shared data. If forty products carry the same size chart, create one chart and reference it from all forty. A fix to that chart then reaches every product at once, which a repeater never could.

Flexible content follows the same idea, with one metaobject definition per layout and a list.mixed_reference on the product, the type that may point to entries of different definitions.1 If a flexible content field mostly builds page layouts rather than holding product data, rebuild it with theme sections instead. Section blocks are what Shopify themes use for that job, and they give the merchant a visual editor.

Metaobjects can be pages too

A metaobject definition can be made publishable, translatable and renderable as its own page in the online store, with a theme template and a URL.20 That suits a designer directory or a fabric glossary that was a custom post type with ACF fields.

Moving the values

  1. DefineCreate every metafield and metaobject definition on Shopify first, with validations.
  2. ExportRead the values from the WooCommerce REST API or the database.
  3. ConvertDates, booleans, serialized arrays, attachment and post IDs.
  4. ImportProduct CSV for simple types, the Admin API for the rest.

Where to read them

The WooCommerce REST API returns a product's custom fields in meta_data.17 It leaves out only WooCommerce's own internal keys and keys that start with wp_,21 so ACF's values arrive along with the underscore rows that point to their field keys, still in their stored format. Since ACF 5.11, a field group can also be shown in the WordPress REST API, under an acf property, with the setting "Show in REST API".15 It is off by default. For large catalogues, a direct database export is faster than either.

What needs converting

  • Dates: 20260315 becomes 2026-03-15.11
  • True/false: 1 and 0 become true and false.12
  • Serialized arrays: a:2:{i:0;s:3:"123";…} is unpacked into a list.13
  • Attachment IDs: look up each file's URL in WordPress, upload it to Shopify Files, and write the new file ID.
  • Post IDs: import products first, keep a table of old WooCommerce ID to new Shopify ID, then write the references. Keeping the old ID in a metafield of type id makes later imports match by it.1
  • Everything: Shopify stores every metafield value as a string, whatever its type, so lists and numbers are written in their string form.1

CSV or API

The product CSV takes metafield columns named like Fabric (product.metafields.custom.fabric), and list values separated by a semicolon and a space.5 That covers text, numbers, booleans, dates, colours, URLs, measurements, product references and lists of metaobject references. It does not cover file references, rich text, JSON, single metaobject references or links, and variant metafields cannot go through the product CSV at all.5 Those go through metafieldsSet, which writes up to 25 metafields per call, all or nothing.9

Size limits that bite

Most metafield values can be up to 64 KB and URLs 2 KB. JSON values are limited to 128 KB from API version 2026-04; apps that already wrote larger JSON before April 2026 keep the old 2 MB.219 A long size guide pasted into a Wysiwyg field fits easily. A JSON blob that a plugin used as a database table may not.

Showing and filtering them

On WordPress, someone wrote PHP in the theme to display each field. On a Shopify Online Store 2.0 theme, most metafields can be connected to a section setting from the theme editor without code, through dynamic sources: a file_reference fills an image setting, a list.product_reference fills a product list, and text, numbers, dates and money can fill a rich text block.7 Liquid can read every metafield. A headless storefront needs storefront access switched on in the definition, which is off by default.8

Filters are where the type choice pays off. The Search & Discovery app can filter by single line text, integer, decimal, true or false and metaobject reference metafields, and their list versions, up to 25 filters per store.6 A fabric stored as free text in a multi-line field can never become a filter. The same fabric as a choice list can.

Look for a category metafield first

Shopify's product taxonomy already defines attributes such as fabric, colour and pattern for many categories, as metaobject-backed metafields in the shopify namespace.6 Where one fits your ACF field, use it instead of a custom definition: Shopify's filters and reports already understand it, and standard definitions do not count towards your 256.2

Meta Box, Pods, Secure Custom Fields and plain attributes

ACF is the common case, with more than two million active installs, but not the only one.18 Secure Custom Fields, the fork WordPress.org created from ACF in October 2024, stores data the same way and maps the same way.25 Meta Box (500,000+ installs) and Pods (100,000+) use their own field names but the same underlying idea of values in post meta, so the type table above still applies once you know which field type each one is.2627

The custom data many WooCommerce stores forget is not in a plugin at all. Product attributes that are not used for variations, such as Material or Origin, show on the product page's "Additional information" tab.17 On Shopify they are metafields too. The variations guide covers how to tell which attributes should be options and which should not.

Custom field checklist

  • Export every ACF field group and list which ones sit on products, variations, categories, pages and posts.
  • Remove fields that are empty on most products. A migration is the cheapest moment to drop them.
  • Check each field against Shopify's category metafields before creating a custom definition.
  • Decide which fields need to be filters, and give those a filterable type.
  • Create all definitions and metaobject definitions, with validations, before importing a single value.
  • Upload files to Shopify first, and keep a table from WordPress attachment ID to Shopify file ID.
  • Import products before writing product references, and keep the old WooCommerce ID in an id metafield.
  • Convert dates, date-times (with the right time zone), booleans and serialized arrays.
  • Connect each metafield to the theme with dynamic sources, then compare ten products side by side with the old store.

The free readiness scanner detects ACF and other plugins on a WooCommerce store, and the plugin map lists what replaces each of them.

Hundreds of products with custom data?

  • Every field group mapped to a Shopify type
  • Repeaters rebuilt as metaobjects
  • Files and references re-linked
  • Filters set up where they help
  • Every value counted in the QA report
  • Preview the store before you pay

Frequently asked questions

Can ACF fields be migrated to Shopify?

The values can, the fields themselves cannot. Each ACF field is recreated on Shopify as a metafield definition with a matching type, and the stored values are then converted and imported into those metafields. Repeaters and flexible content become metaobjects.

What replaces an ACF repeater on Shopify?

A metaobject definition with one field per sub-field, and a list.metaobject_reference metafield on the product that points to one metaobject entry per row. A metaobject definition can have up to 40 fields and a metaobject reference list can hold up to 1,024 entries.

How many metafields can a Shopify product have?

Merchants can create up to 256 metafield definitions per resource type, so up to 256 defined fields on products, and apps can create their own 256 each. Standard definitions do not count towards the limit.

Can I import metafields with the Shopify product CSV?

Yes for most simple types, using a column named like Fabric (product.metafields.custom.fabric). File references, rich text, JSON, single metaobject references and variant metafields are not supported in the product CSV, so those need the Admin API or an import app.

Can customers filter products by metafields on Shopify?

Yes, through the Search & Discovery app, for single line text, integer, decimal, true or false and metaobject reference metafields and their list versions. A store can have up to 25 filters.

Sources

  1. Shopify. List of data types, metafields and metaobjects.
  2. Shopify. Metafield limits: definitions, value sizes, lists and choices.
  3. Shopify. Metaobject limits.
  4. Shopify. List of validation options.
  5. Shopify Help Center. Using CSV files to import and export products, metafield columns.
  6. Shopify. Storefront filtering, supported metafield types and filter limit.
  7. Shopify. Dynamic sources, setting and metafield type compatibility.
  8. Shopify. About metafields, definitions, namespaces and storefront access.
  9. Shopify. metafieldsSet, GraphQL Admin API reference.
  10. Shopify. Increased limits in metafield and metaobject definitions, developer changelog, October 2025.
  11. Advanced Custom Fields. Date Picker, storage format.
  12. Advanced Custom Fields. True / False, storage format.
  13. Advanced Custom Fields. Querying relationship fields, serialized storage.
  14. Advanced Custom Fields. How to query posts by custom fields, repeater sub-field keys.
  15. Advanced Custom Fields. WP REST API integration.
  16. Advanced Custom Fields. update_field(), field key references and image values.
  17. WooCommerce. REST API documentation, product meta_data and attribute properties.
  18. WordPress.org. Advanced Custom Fields, plugin directory, active installs as of 2 October 2026.
  19. Shopify. JSON metafield values limited to 128KB, developer changelog, February 2026.
  20. Shopify. Use metaobject capabilities.
  21. WooCommerce source code. class-wc-data-store-wp.php, filter for internal meta keys.
  22. Advanced Custom Fields. Date Time Picker, storage format.
  23. Advanced Custom Fields. Checkbox, storage format.
  24. Advanced Custom Fields. Clone, how values are saved.
  25. WordPress.org News. Secure Custom Fields, 12 October 2024.
  26. WordPress.org. Meta Box, plugin directory, active installs as of 2 October 2026.
  27. WordPress.org. Pods, plugin directory, active installs as of 2 October 2026.

Mufatech Studio migrates stores to Shopify. Limits and formats are quoted from Shopify's, ACF's and WooCommerce's own documentation as of October 2026; Shopify raised several of these limits in 2025 and 2026, so older guides may quote lower numbers.