Coverage : Media Cleanup Shopify App

Resource Type Overview

Resource

Scans Metafields

Scans Content/Media

Matching Strategy

Status

Tested

Products

✅ Yes (product + variant)

✅ Gallery, Variants, Description HTML

ID + Filename

✅ Production

✅ Yes

Collections

✅ Yes

✅ Featured Image, Description HTML

Filename

✅ Production

✅ Yes

Blogs

✅ Yes (blog-level)

✅ No direct media

Filename

✅ Production

✅ Yes

Blog Articles

✅ Yes

✅ Featured Image, Body HTML

Filename

✅ Production

✅ Yes

Pages

✅ Yes

✅ Body HTML

Filename

✅ Production

✅ Yes

Themes

✅ N/A

✅ JSON Settings, Code Files

Filename

✅ Production

❌ No

Shop

✅ Yes (metafields)

✅ No direct media

Filename

✅ Production

❌ No

Shop Branding

✅ N/A

⚠️ Placeholder (API unavailable)

Filename

⚠️ Limited

❌ No

Customers

✅ Yes

✅ No direct media

Filename

✅ Ready

✅ Yes

Orders

✅ Yes

✅ No direct media

Filename

✅ Ready

✅ Yes

Draft Orders

✅ Yes

✅ No direct media

Filename

✅ Ready

✅ Yes

Locations

✅ Yes

✅ No direct media

Filename

✅ Ready

✅ Yes

Markets

✅ Yes

✅ No direct media

Filename

✅ Ready

✅ Yes

PRODUCTS

Status:Fully Tested & Production Ready

What We Scan:

Detection Method

Description

Matching

Example

Gallery Media

Product media gallery (images, videos, 3D models)

ID

gid://shopify/MediaImage/123

Variant Images

Individual variant images

ID

gid://shopify/ProductImage/456

Description HTML

Inline images in product description

Filename

<img src=".../product-detail.jpg">

Product Metafields

file_reference, list.file_reference

ID

Metafield → gid://shopify/GenericFile/789

Variant Metafields

Variant-specific metafield files

ID

Variant metafield → gid://shopify/MediaImage/321

COLLECTIONS

Status:Fully Tested & Production Ready

What We Scan:

Detection Method

Description

Matching

Example

Featured Image

Collection featured/cover image

Filename

collection-banner.jpg

Description HTML

Inline images in collection description

Filename

<img src=".../promo.jpg">

Metafields

file_reference, list.file_reference

Filename

Metafield → file reference

BLOGS

Status:Fully Tested & Production Ready

What We Scan:

Detection Method

Description

Matching

Example

Blog Metafields

Blog-level metafield files

Filename

Blog metafield → file

BLOG ARTICLES

Status:Fully Tested & Production Ready

What We Scan:

Detection Method

Description

Matching

Example

Featured Image

Article featured/hero image

Filename

article-hero.jpg

Body HTML

Inline images in article body

Filename

<img src=".../content.jpg">

Metafields

file_reference, list.file_reference

Filename

Metafield → file

PAGES

Status:Fully Tested & Production Ready

What We Scan:

Detection Method

Description

Matching

Example

Body HTML

Inline images in page content

Filename

<img src=".../page-image.jpg">

Metafields

file_reference, list.file_reference

Filename

Metafield → file

THEMES

Status:Production Ready | ⚠️ Manual Testing Only

What We Scan:

A. JSON Settings (QUICK Mode - 15-30s)

File Type

Path

What's Detected

Global Settings

config/settings_data.json

Logo, favicon, brand colors

Theme Schema

config/settings_schema.json

Default images

Page Templates

templates/*.json

Section images, backgrounds

B. Code Files (THOROUGH Mode - 1-2min)

File Type

Extensions

What's Detected

Liquid Templates

.liquid

Hardcoded CDN URLs

Stylesheets

.css, .scss

Background images, URLs

JavaScript

.js, .js.liquid

Dynamic media references

Rate Limiting:

  • REST API Limit: 2 requests/second
  • Implementation: RateLimiter class with 500ms delay
  • Typical Theme: 50-200 files
  • Scan Time: QUICK (10-20 files, ~15s), THOROUGH (50-200 files, ~1-2min)

SHOP METAFIELDS

Status:Fully Tested & Production Ready

What We Scan:

Detection Method

Description

Matching

Example

Shop Metafields

Shop-level metafield files

Filename

Shop metafield → file

SHOP BRANDING

Status: ⚠️ Placeholder Only - API Unavailable

What We Scan:

Detection Method

Description

Status

Logo

Shop logo image

⚠️ API unavailable

Square Logo

Square logo variant

⚠️ API unavailable

Cover Image

Shop cover/banner

⚠️ API unavailable

CUSTOMERS

Status:Code Ready

What We Scan:

Detection Method

Description

Matching

Example

Customer Metafields

Profile images, documents

Filename

Customer metafield → file

ORDERS

Status:Code Ready

What We Scan:

Detection Method

Description

Matching

Example

Order Metafields

Custom designs, proofs, attachments

Filename

Order metafield → file

DRAFT ORDERS

Status:Code Ready

What We Scan:

Detection Method

Description

Matching

Example

Draft Order Metafields

Design files, mockups

Filename

Draft order metafield → file

LOCATIONS

Status:Code Ready

What We Scan:

Detection Method

Description

Matching

Example

Location Metafields

Store photos, maps

Filename

Location metafield → file

MARKETS

Status:Code Ready

What We Scan:

Detection Method

Description

Matching

Example

Market Metafields

Region-specific assets

Filename

Market metafield → file

LIMITATIONS :

Nested Resource Limits

Resource Type

What's Fetched

Limit

Pagination

Impact

Products

All products

✅ Yes

None

Variants per product

100

❌ No

Products with >100 variants miss some

Metafields per product

50

❌ No

Products with >50 metafields miss some

Metafields per variant

20

❌ No

Variants with >20 metafields miss some

Media gallery per product

250

❌ No

Products with >250 media miss some

Files per list.file_reference

10

❌ No

Lists with >10 files miss some

Collections

All collections

✅ Yes

None

Metafields per collection

50

❌ No

Collections with >50 metafields miss some

Pages

All pages

✅ Yes

None

Metafields per page

50

❌ No

Pages with >50 metafields miss some

Blogs

All blogs

✅ Yes

None

Articles per blog

✅ Yes

None

Metafields per article

50

❌ No

Articles with >50 metafields miss some

Orders

All orders

✅ Yes

None

Metafields per order

50

❌ No

Orders with >50 metafields miss some

Draft Orders

All draft orders

✅ Yes

None

Metafields per draft order

50

❌ No

Draft orders with >50 metafields miss some

Customers

All customers

✅ Yes

None

Metafields per customer

50

❌ No

Customers with >50 metafields miss some

Locations

All locations

✅ Yes

None

Metafields per location

50

❌ No

Locations with >50 metafields miss some

Markets

All markets

✅ Yes

None

Metafields per market

50

❌ No

Markets with >50 metafields miss some

Shop

Shop metafields

50

❌ No

Shops with >50 metafields miss some

Query Performance Limits

Query Type

Page Size

Why Limited

Real-World Impact

Products

3 per call

Variants are expensive (cost limit)

Slow for stores with 1000+ products

Collections

250 per call

Standard

Fast

Pages

250 per call

Standard

Fast

Blogs

250 per call

Standard

Fast

Articles (per blog)

250 per call

Standard

Fast

Orders

250 per call

Standard

Fast

Draft Orders

250 per call

Standard

Fast

Customers

250 per call

Standard

Fast

Locations

250 per call

Standard

Fast

Markets

250 per call

Standard

Fast

Files

250 per call

Standard

Fast

Theme Scanning Coverage

Scan Mode

Files Scanned

Time

Coverage

Limitations

QUICK

JSON settings only

15-30s

90-92%

Misses hardcoded URLs in Liquid/CSS/JS

THOROUGH

JSON + Liquid/CSS/JS

1-2 min

95-98%

Slower, rate limited (2 req/sec)

Protected Customer Data Requirements

Resource

Fields

Approval Needed

Workaround

Customers

displayName, email

✅ Yes

Can fetch ID & metafields only

Orders

All order data

✅ Yes

Can fetch ID, name & metafields

Draft Orders

All draft order data

✅ Yes

Can fetch ID, name & metafields

Feature Coverage

Feature

Coverage

Status

Notes

Product gallery images

100%

✅ Perfect

ID-based matching

Variant images

100%

✅ Perfect

ID-based matching

Product description HTML

~98%

✅ Excellent

Filename-based matching

Collection images

~95%

✅ Good

Filename-based (no direct ID)

Blog article images

~98%

✅ Excellent

Filename-based

Page HTML images

~98%

✅ Excellent

Filename-based

Theme JSON settings

100%

✅ Perfect

Both modes

Theme code files

0-95%

⚠️ Variable

Only in THOROUGH mode

Metafield file_reference

100%

✅ Perfect

ID-based matching

Metafield list.file_reference

~98%

✅ Excellent

First 10 files only

Metafield text/JSON with URLs

~95%

✅ Good

Filename-based

Shop branding (logo)

0%

❌ Not available

API doesn't expose this

False Positive Risk

Scenario

Risk Level

Why

Mitigation

Duplicate filenames

Low

Same filename, different files

Intentionally safe - won't delete if ANY match

Old theme references

Low

File used in inactive theme

Only scans active theme

External CDN URLs

None

Only matches shopify CDN

N/A

Real-World Impact

Store Size

Typical Impact

Scan Time (QUICK)

Scan Time (THOROUGH)

Small (<100 products)

0% missed

10-20s

30s-1min

Medium (100-1000 products)

<0.1% missed

30s-2min

1-3min

Large (1000-10000 products)

<0.5% missed

2-10min

5-20min

Enterprise (>10000 products)

<1% missed

10-30min

20-60min

Updated on