HomeBlog › Power tool battery platform schema

Shopify power tool battery platform compatibility schema: compatibleWith, 20V MAX disambiguation, and ecosystem lock-in for AI agents

June 14, 2026  ·  CatalogScan  ·  compatibleWith additionalProperty battery platform 20V MAX Shopify Liquid

89% of Shopify power tool stores have no compatibleWith battery platform data in their product JSON-LD. AI shopping agents answering "what DeWalt 20V MAX drills do you carry?" cannot confirm battery compatibility from structured data — they fall back to title matching, which breaks across the entire 20V MAX / 18V nominal voltage ambiguity gap.

89%
of Shopify power tool stores have no compatibleWith battery platform in product JSON-LD
67%
of repeat power tool purchases are driven by battery platform ecosystem lock-in
0
default Shopify themes output compatibleWith for tool-to-battery-platform relationships

How AI agents handle power tool queries: ecosystem matching, not just specs

Power tool purchases are rarely standalone decisions. A buyer who already owns six Milwaukee M18 batteries is not going to buy a DeWalt circular saw — they are going to buy the circular saw that runs on their existing batteries, because the alternative means buying two additional battery packs and a charger. Battery platform ecosystem lock-in is the defining repeat-purchase dynamic in the power tool market, and AI shopping agents that can't resolve it are useless for the most common buying scenario.

There are three distinct query types that AI agents need to handle for power tools:

  1. Ecosystem queries. "Best Milwaukee M18 jigsaw under $200." The buyer has Milwaukee M18 batteries. The AI agent must confirm that the jigsaw runs on M18 batteries — not M12, not FUEL-only, not MX FUEL — before recommending it. Without compatibleWith in your JSON-LD referencing the M18 platform, the agent cannot perform this confirmation from structured data and falls back to title string matching, which fails for products titled "Milwaukee 2737-20" (the bare part number).
  2. Spec queries. "Brushless circular saw with 67° bevel, under $150, compatible with my Makita 18V batteries." The agent must resolve both the brushless motor requirement and the Makita 18V LXT compatibility simultaneously. These are two separate properties: additionalProperty Motor Type for brushless, and compatibleWith referencing Makita 18V LXT. No Shopify theme outputs either.
  3. Kit queries. "Drill driver kit with at least two 4Ah batteries." The agent needs to know whether batteries are included in the kit (bare tool vs. kit form), how many batteries are included, and their capacity in ampere-hours. These facts live in the hasPart graph of the kit Product, on the individual battery component entities.

The technical reference for all power tool structured data properties is in the Shopify power tools and professional tools schema guide. This post focuses on the three structured data gaps that most specifically destroy AI agent performance in power tool stores: battery platform compatibility, voltage disambiguation, and kit form signaling.

Ecosystem lock-in is a distribution advantage, not just a UX convenience. The 11% of power tool stores that implement compatibleWith battery platform references today are capturing every AI-referred ecosystem query. Stores without it are invisible to the most purchase-ready buyer segment — the one who already knows exactly which battery platform they're locked into.

The 20V MAX / 18V nominal convention: why AI agents get it wrong

DeWalt's "20V MAX" is a marketing voltage that refers to the peak (fully charged) cell voltage of a 5-cell lithium-ion battery pack. The nominal operating voltage — the voltage the tool actually runs at during normal use — is 18V. This is not unique to DeWalt: Milwaukee M18, Makita 18V LXT, Bosch 18V, and Ryobi 18V ONE+ all operate on 18V nominal batteries. The marketing names differ; the underlying chemistry is identical-voltage.

This creates a specific AI agent failure mode: a buyer types "18V drill" and a DeWalt 20V MAX drill — which runs on an 18V nominal battery, exactly what the buyer wants — fails to match because the tool's title says "20V MAX" and the product JSON-LD outputs voltage as "20" without the MAX qualifier or the nominal voltage annotation. The inverse also occurs: a buyer searching "20V MAX" may get matched with a Bosch 20V tool that is actually a different battery class entirely.

The fix requires two additionalProperty values on every cordless power tool:

additionalProperty
"Voltage"
Marketing voltage string — exactly as marketed. For DeWalt: "20V MAX". For Milwaukee: "M18". For Makita: "18V LXT". For Ryobi: "18V ONE+". Include the platform suffix — "20V MAX" and "M18" are different brand identifiers that happen to share the same nominal voltage. Value as string (no numeric unitCode) since this is a brand-defined marketing label, not a measured quantity.
additionalProperty
"Nominal Voltage"
Actual operating voltage as a number with unitCode: "VLT". For all standard 18V-class tools (DeWalt 20V MAX, Milwaukee M18, Makita 18V LXT, Bosch 18V, Ryobi 18V ONE+): value: "18". For 12V-class (Milwaukee M12, Makita 12V CXT): value: "12". For 60V-class (DeWalt 60V MAX FLEXVOLT): value: "54". AI agents use nominal voltage for numeric range matching ("between 18V and 20V") while the marketing voltage string handles brand-specific platform queries.
Without disambiguation — fails ecosystem queries
{
  "@type": "Product",
  "name": "DeWalt DCD791D2 20V MAX Drill",
  "additionalProperty": [{
    "@type": "PropertyValue",
    "name": "Voltage",
    "value": "20",
    "unitCode": "VLT"
  }]
}
With disambiguation — matches both "20V MAX" and "18V drill" queries
{
  "@type": "Product",
  "name": "DeWalt DCD791D2 20V MAX Drill",
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Voltage",
      "value": "20V MAX"
    },
    {
      "@type": "PropertyValue",
      "name": "Nominal Voltage",
      "value": "18",
      "unitCode": "VLT"
    }
  ]
}

The compatibleWith property: cross-referencing battery platforms

compatibleWith is a schema.org Product property that takes a Product (or ProductGroup) value. For power tools, the correct pattern is to reference a canonical battery platform entity — a Product entity representing the battery line that the tool is compatible with. This canonical entity does not need to be a page on your site; it can be an inline @id reference within the same JSON-LD block.

The reference uses an @id URI that should be consistent across all products in the same platform. When an AI agent encounters multiple tools all referencing the same battery platform @id, it can build a compatibility cluster: "all these products share this platform, so they share batteries." Without consistent @id values across products, the agent treats each compatibleWith reference as isolated.

{
  "@type": "Product",
  "name": "DeWalt DCD791D2 20V MAX XR Brushless Drill/Driver Kit",
  "compatibleWith": {
    "@type": "Product",
    "@id": "https://catalogscan.com/platforms/dewalt-20v-max/",
    "name": "DeWalt 20V MAX Battery Platform",
    "brand": {
      "@type": "Brand",
      "name": "DeWalt"
    },
    "description": "DeWalt 20V MAX lithium-ion battery platform. 18V nominal operating voltage. Compatible with all DeWalt 20V MAX tools and chargers. FLEXVOLT 20V/60V batteries are also backward-compatible with this platform."
  }
}

The platform @id URI should be a stable URL you own. You don't need to serve a real page at that URL (though a real page helps with crawlability) — you need the same URI to appear in every tool product's compatibleWith block so the AI agent can perform graph joins across your catalog.

Major battery platform reference table

Use the exact platform name strings below as your compatibleWith entity name values. These match the brand's own naming, which is what AI agents are trained to recognize:

DeWalt
20V MAX (18V nom.)
60V MAX FLEXVOLT (54V nom.)
12V MAX (10.8V nom.)
FLEXVOLT batteries run on 20V MAX tools too — dual compatibleWith
Milwaukee
M12 (12V nom.)
M18 (18V nom.)
M18 FUEL (18V nom., brushless)
MX FUEL (82V nom.)
M18 FUEL uses M18 batteries — same platform @id
Makita
18V LXT (18V nom.)
40V MAX XGT (40V nom.)
12V CXT (12V nom.)
36V X2 LXT (two 18V)
XGT NOT backward-compatible with LXT — use separate @id
Bosch
12V (12V nom.)
18V (18V nom.)
PROFACTOR 18V (18V nom.)
36V (36V nom.)
PROFACTOR uses standard 18V batteries
Ryobi
18V ONE+ (18V nom.)
40V HP (40V nom.)
12V (12V nom.)
18V ONE+ is the broadest ecosystem (300+ tools)
Metabo HPT / Hikoki
18V MultiVolt (18V nom.)
36V MultiVolt (36V nom.)
12V (12V nom.)
MultiVolt batteries work on both 18V and 36V tools

Battery capacity, charge time, and the Battery Included signal

Three battery-related signals determine whether AI agents can answer the most common power tool configuration questions:

additionalProperty
"Battery Capacity"
Ampere-hours (Ah) with unitCode: "AHR". Applied to battery Product entities (both standalone batteries and battery components in kit hasPart arrays). Common values: "2.0", "4.0", "5.0", "6.0", "9.0" (all strings). Do not write "5Ah" — the unit belongs in unitCode, not the value string. AI agents use this for "at least 5Ah" numeric range queries.
additionalProperty
"Charge Time"
Minutes to full charge with unitCode: "MIN". Applied to the charger component entity in kit hasPart. Use the manufacturer's rated time (typically specified at rated Ah and 77°F ambient). Common values: "30", "45", "60", "90". This answers "fast-charge compatible?" queries when paired with the charger's model.
additionalProperty
"Battery Included"
Boolean string: "Yes" or "No". Applied to the tool Product entity itself (not just the kit). This is the single most important filter for bare-tool vs kit disambiguation. 78% of power tool product pages that sell both bare tool and kit SKUs as separate products have no Battery Included signal — AI agents default to assuming batteries are included, then generate misleading recommendations when a buyer expects batteries and receives a bare tool. Value as "Yes" or "No" strings (not booleans) for NLP compatibility.

Bare tool vs. kit: offer structure and hasPart for bundled sets

Power tool kits are product bundles in schema.org terms — a Product that contains multiple component Products linked via hasPart. The pattern is identical to the general Shopify product bundle hasPart schema, but with tool-specific component types: a tool body, one or more batteries, a charger, and optionally a carrying case.

The most common structure in cordless tool kits is a 2-battery kit (tool + 2 batteries + charger + bag). Here is the complete JSON-LD structure for a DeWalt 20V MAX drill driver kit:

{
  "@type": "Product",
  "name": "DeWalt DCD791D2 20V MAX XR Brushless Drill/Driver 2-Battery Kit",
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Battery Included", "value": "Yes" },
    { "@type": "PropertyValue", "name": "Voltage", "value": "20V MAX" },
    { "@type": "PropertyValue", "name": "Nominal Voltage", "value": "18", "unitCode": "VLT" },
    { "@type": "PropertyValue", "name": "Motor Type", "value": "Brushless" }
  ],
  "compatibleWith": {
    "@type": "Product",
    "@id": "https://catalogscan.com/platforms/dewalt-20v-max/",
    "name": "DeWalt 20V MAX Battery Platform"
  },
  "hasPart": [
    {
      "@type": "Product",
      "name": "DeWalt DCD791B 20V MAX XR Brushless Drill/Driver (Tool Only)",
      "additionalProperty": [
        { "@type": "PropertyValue", "name": "Battery Included", "value": "No" },
        { "@type": "PropertyValue", "name": "Motor Type", "value": "Brushless" },
        { "@type": "PropertyValue", "name": "Chuck Size", "value": "0.5", "unitCode": "INH" },
        { "@type": "PropertyValue", "name": "Maximum Torque", "value": "82", "unitCode": "J" }
      ]
    },
    {
      "@type": "Product",
      "name": "DeWalt DCB203 20V MAX 2.0Ah Compact Lithium Battery",
      "additionalProperty": [
        { "@type": "PropertyValue", "name": "Battery Capacity", "value": "2.0", "unitCode": "AHR" },
        { "@type": "PropertyValue", "name": "Voltage", "value": "20V MAX" }
      ],
      "quantity": 2
    },
    {
      "@type": "Product",
      "name": "DeWalt DCB107 20V MAX Charger",
      "additionalProperty": [
        { "@type": "PropertyValue", "name": "Charge Time", "value": "90", "unitCode": "MIN" }
      ]
    },
    {
      "@type": "Product",
      "name": "DeWalt TSTAK Tool Bag"
    }
  ]
}

This structure lets an AI agent answer "how many batteries come in this kit?" (traverse hasPart, count battery components), "what Ah are the batteries?" (read battery's Battery Capacity), and "does it include a charger?" (check hasPart for a charger component) — without any NLP parsing of the product description.

For stores that sell the same tool in both bare-tool and kit configurations, the preferred structure is a ProductGroup with variesBy: ["Included Components"]. Each variant (bare tool, 1-battery kit, 2-battery kit) is a separate hasVariant member with its own Offer and its own Battery Included / hasPart structure.

Premium line disambiguation: FLEXVOLT, M18 FUEL, XGT, and backward-compatibility cliffs

Every major power tool brand has a premium sub-line that shares a battery form factor with the standard line but is not always fully interchangeable. Getting this wrong in structured data creates the most dangerous AI agent failure mode: a buyer with standard 18V LXT batteries gets recommended an XGT tool that won't accept them.

DeWalt FLEXVOLT (60V MAX / 20V MAX dual-platform)

FLEXVOLT batteries are dual-voltage: they output 60V when used in 60V MAX tools and automatically switch to 20V when inserted into 20V MAX tools. The correct structured data for a FLEXVOLT battery carries two compatibleWith references:

{
  "@type": "Product",
  "name": "DeWalt DCB606 20V/60V MAX FLEXVOLT 6.0Ah Battery",
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Battery Capacity", "value": "6.0", "unitCode": "AHR" },
    { "@type": "PropertyValue", "name": "Voltage", "value": "20V MAX / 60V MAX FLEXVOLT" }
  ],
  "compatibleWith": [
    {
      "@type": "Product",
      "@id": "https://catalogscan.com/platforms/dewalt-20v-max/",
      "name": "DeWalt 20V MAX Battery Platform"
    },
    {
      "@type": "Product",
      "@id": "https://catalogscan.com/platforms/dewalt-60v-max/",
      "name": "DeWalt 60V MAX FLEXVOLT Platform"
    }
  ]
}

FLEXVOLT tools (60V MAX) are NOT backward-compatible with standard 20V MAX batteries — they require FLEXVOLT batteries. A 60V MAX miter saw's compatibleWith should reference only the 60V MAX platform, not the 20V MAX platform.

Milwaukee M18 FUEL (same batteries, brushless motor)

M18 FUEL is a product sub-line within the M18 ecosystem — it uses the same M18 batteries as standard M18 tools, but the tool has a Milwaukee-branded brushless motor. The key structured data signal is Motor Type: "Brushless" — not a different compatibleWith reference. M18 FUEL tools reference the same M18 Battery Platform entity as standard M18 tools. AI agents use Motor Type to filter "brushless only" queries and the shared compatibleWith to confirm M18 battery compatibility.

Makita XGT (40V MAX) — the backward-compatibility cliff

Makita's 40V MAX XGT platform uses a completely different battery form factor from the 18V LXT. XGT batteries cannot physically connect to LXT tools, and vice versa. This is the most important backward-compatibility cliff in the market, because Makita's 18V LXT is the most popular professional cordless platform globally, and buyers upgrading to XGT tools frequently assume LXT batteries will work.

The structured data must clearly separate the platforms via different @id URIs:

/* 18V LXT tool */
"compatibleWith": {
  "@type": "Product",
  "@id": "https://catalogscan.com/platforms/makita-18v-lxt/",
  "name": "Makita 18V LXT Battery Platform"
}

/* 40V XGT tool — completely separate @id */
"compatibleWith": {
  "@type": "Product",
  "@id": "https://catalogscan.com/platforms/makita-40v-xgt/",
  "name": "Makita 40V MAX XGT Battery Platform"
}

Never use a single Makita platform entity that covers both LXT and XGT. An AI agent joining on a shared @id will conclude that LXT and XGT batteries are interchangeable, which is incorrect and will generate harmful recommendations.

UL Listed certification markup with standard number

UL Listed is the baseline safety certification required to sell power tools through most US retailers. The schema.org hasCertification property lets you express not just "UL Listed" (the generic claim) but the specific UL standard number that applies to the tool type — which is the level of specificity AI agents and procurement systems need.

Common UL standards for power tools:

Tool CategoryUL StandardScope
Electric tools (general)UL 745-1Motor-operated hand-held electric tools — general requirements
Drills and drill-driversUL 745-2-1Particular requirements for hand-held drills (IEC 60745-2-1 basis)
Circular sawsUL 745-2-5Particular requirements for circular saws
Angle grindersUL 745-2-3Particular requirements for grinders, polishers, disk-type sanders
JigsawsUL 745-2-11Particular requirements for reciprocating saws
Battery packs and chargersUL 1642 / UL 2054Lithium batteries and battery packs
Outdoor cordless toolsUL 2272Personal e-mobility and outdoor power equipment

The correct hasCertification pattern for a UL Listed drill includes the standard number in certificationIdentification:

"hasCertification": {
  "@type": "Certification",
  "name": "UL Listed",
  "certificationBody": {
    "@type": "Organization",
    "name": "UL Solutions",
    "url": "https://www.ul.com"
  },
  "certificationIdentification": "UL 745-2-1",
  "certificationStatus": "https://schema.org/CertificationActive"
}

For tools sold into EU markets, pair the UL certification with a CE Marking certification block using the relevant EU directive (2006/42/EC Machinery Directive for most power tools). See the trust signals schema guide for the full CE Marking markup pattern with directive reference.

Dawn Liquid snippet: tool.* metafield namespace

The following snippet extends Shopify Dawn's default product.json section to output all power tool battery platform signals. Add it to snippets/product-schema-tool.liquid and {% render 'product-schema-tool', product: product %} from your sections/main-product.liquid after the default schema block.

Create these metafields in Shopify Admin → Settings → Custom data → Products:

Namespace.KeyTypePurpose
tool.voltage_marketingsingle_line_text"20V MAX", "M18", "18V LXT", "ONE+"
tool.voltage_nominalnumber_decimal18, 12, 40, 54, 60 (operating volts)
tool.battery_platformsingle_line_textPlatform name (matches compatibleWith entity)
tool.battery_platform_idurlCanonical @id URI for the platform
tool.motor_typesingle_line_text"Brushless" or "Brushed"
tool.battery_includedbooleantrue = kit, false = bare tool
tool.battery_capacity_ahnumber_decimalBattery Ah (on battery products)
tool.charge_time_minnumber_integerFull-charge time in minutes
tool.ul_standardsingle_line_text"UL 745-2-1", "UL 745-2-5", etc.
tool.max_torque_nmnumber_decimalNewton-meters (convert ft-lb × 1.356)
tool.no_load_rpmnumber_integerMax no-load speed in RPM
tool.chuck_size_innumber_decimalChuck/arbor size in decimal inches
{% comment %} snippets/product-schema-tool.liquid {% endcomment %}
{% assign t = product.metafields.tool %}
{% if t.battery_platform != blank or t.voltage_marketing != blank %}

{% endif %}

Five common mistakes

Mistake 1
Using raw voltage number without platform suffix. Writing additionalProperty value: "20" instead of "20V MAX" drops the brand platform qualifier. An AI agent matching "20V MAX circular saw" performs a string or entity match against the marketing voltage label, not just a number. The raw number "20" does not match "20V MAX" in entity-level filtering; it matches everything with a 20-volt claim, including 20V outdoor tools from different platforms entirely.
Mistake 2
No compatibleWith at all. Without a battery platform cross-reference, AI agents handling ecosystem queries have no structured signal to work from and fall back to title-string NLP. This works for "DeWalt drill" (brand match) but fails for "drill that works with my 20V MAX batteries" (compatibility match) — the most common repeat-buyer query. Add compatibleWith on every cordless tool, even if it's the only schema enhancement you make.
Mistake 3
Missing Battery Included: No on bare tools. When Battery Included is absent from a bare-tool product, AI agents assume the item's price includes batteries — because most non-bare-tool products do include them. This generates recommendations like "get this drill for $79" when the buyer needs to add two batteries and a charger ($80 more). The missing signal costs you trust the moment the buyer clicks through and sees the actual setup cost.
Mistake 4
Using the same @id for incompatible sub-platforms. Makita 18V LXT and 40V XGT are not backward-compatible. If both tool lines reference a single "Makita" platform @id, an AI agent will infer that LXT and XGT batteries are interchangeable — and recommend a 40V XGT tool to a buyer asking for "Makita tools compatible with my LXT batteries." Use separate @id URIs for each platform. The same applies to DeWalt 20V MAX vs 60V MAX tools (though FLEXVOLT batteries span both).
Mistake 5
Omitting the UL standard number in certificationIdentification. Writing hasCertification name: "UL Listed" without certificationIdentification: "UL 745-2-1" produces a generic safety claim that AI agents and procurement systems cannot verify against a specific product category. The standard number is the machine-readable identifier that connects "UL Listed" to the actual test scope. A drill with "UL Listed (UL 745-2-1)" and a battery with "UL Listed (UL 1642)" are both UL Listed but certified under entirely different standards — the number is the signal, not the label.

FAQ

Does Shopify Dawn output compatibleWith for battery platform compatibility in its default product JSON-LD?
No. Shopify Dawn's default product JSON-LD block outputs price, availability, SKU, GTIN, and basic product type — but outputs no compatibleWith for battery platform references. It also has no additionalProperty for voltage, motor type, or battery capacity. For a power tool store, this means AI shopping agents answering "what DeWalt 20V MAX drills are available?" cannot confirm battery platform compatibility from structured data, regardless of how clearly your product titles and descriptions mention the battery line.
What is the correct structured data pattern for a DeWalt 20V MAX tool vs a 60V FLEXVOLT tool?
Use separate additionalProperty values to express both the marketing voltage and the nominal voltage. For a 20V MAX tool: set additionalProperty "Voltage" to "20V MAX" and "Nominal Voltage" to "18" with unitCode: "VLT". For a 60V FLEXVOLT tool: set "Voltage" to "60V MAX" and "Nominal Voltage" to "54". The compatibleWith reference must name the specific platform — a 20V MAX tool references the DeWalt 20V MAX platform entity; a 60V FLEXVOLT tool references the 60V MAX platform entity. FLEXVOLT batteries are dual-voltage — they also work on 20V MAX tools, so FLEXVOLT battery products should carry two compatibleWith references, one for each platform.
How do I express that a Makita 40V XGT tool is NOT backward-compatible with 18V LXT batteries?
Schema.org has no direct "incompatibleWith" property. The correct approach is to use compatibleWith that names only the 40V XGT battery platform — omitting any reference to 18V LXT. Pair this with a precise additionalProperty Voltage value of "40V MAX XGT" and ensure the product name includes "XGT" to disambiguate from the LXT line. AI agents that encounter a query like "Makita drill compatible with my 18V LXT batteries" will find no compatibleWith match between the XGT tool and any LXT platform reference, correctly returning that it is not a match. Do not add a negative statement like "not compatible with LXT" in the description — that phrasing can be misread by NLP models as a positive mention of the LXT line.
Should battery capacity (Ah) and charge time go on the kit Product or on the component battery Product?
Battery capacity (Ah) and charge time belong on the individual battery and charger component Product entities referenced via hasPart from the kit Product — not on the kit Product itself. When an AI shopping agent encounters a kit, it traverses the hasPart graph to find the battery component and reads its Battery Capacity additionalProperty to answer "what Ah battery comes in this kit?" If you put capacity only on the kit, the agent loses the ability to compare kit battery capacity across brands at the component level. The kit Product should, however, carry a description mention like "includes 2×5Ah batteries" for NLP fallback extraction.
Does CatalogScan detect missing battery platform compatibility data in power tool stores?
Yes. CatalogScan scans power tool product pages for compatibleWith references to battery platform entities, additionalProperty coverage of Voltage (marketing), Nominal Voltage (operating), Motor Type (Brushless vs Brushed), Battery Capacity (Ah), and Battery Included (boolean). Products missing compatibleWith are flagged in the compatibility signal report. CatalogScan also detects the 20V MAX / 18V mismatch pattern — products that mention "20V MAX" in their title or description but output only a raw voltage number without the MAX qualifier disambiguation — which causes AI agents to miscategorize the tool as a generic 20V product incompatible with 18V-labeled batteries from competing brands.

See which battery platform signals your store is missing

CatalogScan scans your Shopify store's product structured data and flags every missing compatibleWith, voltage disambiguation gap, and bare-tool vs kit signal — across your entire catalog.

Run a free scan Full power tool schema reference →