{
  "$schema": "https://jpegconvert.com/data/upload-requirements/v1/catalog.schema.json",
  "schemaVersion": 1,
  "id": "https://jpegconvert.com/data/upload-requirements/v1/catalog.json",
  "siteUrl": "https://jpegconvert.com",
  "asOf": "2026-09-05",
  "sourceCheckedThrough": "2026-09-05",
  "referenceUrl": "/upload-requirements",
  "documentationUrl": "/upload-requirements/data",
  "coverage": {
    "description": "Selected upload surfaces with source-linked rules that JPEGConvert can help people inspect. This is not a complete list of every destination or requirement.",
    "sourceReviewMeaning": "asOf dates this catalog snapshot. sourceCheckedThrough is the latest recorded profile review, not a claim that every source was checked that day. Each profile retains its own reviewedOn and nextReviewOn.",
    "ruleKinds": "Requirements, recommendations, and general guidance retain different meanings. Check coverage can be complete, partial, or limited to certain formats.",
    "defaultChecks": "A check object describes a possible local check. activeCheckRuleIds identifies checks loaded by the default preset form, not which policy is effective today. Recommendations can remain manual when a requirement uses the same check type.",
    "byteNormalization": "Normalized byte values are local interpretations when a publisher leaves its displayed KB or MB unit undefined. Read each check’s normalizationNote and displayValue.",
    "acceptance": "A matching local check does not guarantee acceptance, display, delivery, ranking, or account eligibility at the destination.",
    "toolLimits": "Destination requirements and JPEGConvert input/decoder limits are different. Read the linked tool’s limits before choosing a file.",
    "sourceTerms": "The linked publishers control their source pages; this catalog does not replace those pages or their terms."
  },
  "profiles": [
    {
      "schemaVersion": 1,
      "id": "chatgpt-image",
      "label": "ChatGPT image input",
      "destination": "Image attached to a ChatGPT conversation",
      "category": "ai-assistant",
      "appliesTo": [
        "image"
      ],
      "summary": "Check the published ChatGPT image formats, per-image size limit, and still-image requirement without claiming that the model will interpret the image correctly.",
      "reviewedOn": "2026-08-29",
      "nextReviewOn": "2026-11-29",
      "sources": [
        {
          "id": "chatgpt-image-inputs",
          "publisher": "OpenAI Help Center",
          "title": "ChatGPT Image Inputs FAQ",
          "url": "https://help.openai.com/en/articles/8400551-image-inputs-for-chatgpt-faq",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "chatgpt-image-size",
          "kind": "requirement",
          "label": "Keep each image at 20 MB or less",
          "description": "OpenAI lists a 20 MB limit for each image attached to ChatGPT.",
          "sourceIds": [
            "chatgpt-image-inputs"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 20000000,
            "displayValue": "20 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. OpenAI publishes the limit as 20 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "chatgpt-image-formats",
          "kind": "requirement",
          "label": "Use PNG, JPG, JPEG, or GIF",
          "description": "OpenAI lists PNG, JPEG, and non-animated GIF as supported ChatGPT image inputs.",
          "sourceIds": [
            "chatgpt-image-inputs"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpg",
              "jpeg",
              "png",
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "chatgpt-still-gif",
          "kind": "requirement",
          "label": "Use a still image",
          "description": "OpenAI specifies non-animated GIF, so an animated image should be reduced to one reviewed frame before use.",
          "sourceIds": [
            "chatgpt-image-inputs"
          ],
          "check": {
            "type": "image-features",
            "allowAnimation": false,
            "applicableFormats": [
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "chatgpt-image-legibility",
          "kind": "guidance",
          "label": "Keep text large, upright, and undistorted",
          "description": "OpenAI documents limitations with small or rotated text, panoramic or fisheye images, and some graph styles.",
          "sourceIds": [
            "chatgpt-image-inputs"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "chatgpt-image-understanding",
          "text": "Matching format and size rules cannot prove that ChatGPT will correctly read small text, count objects, interpret a chart, or understand the image.",
          "sourceIds": [
            "chatgpt-image-inputs"
          ]
        },
        {
          "id": "chatgpt-image-service-causes",
          "text": "Upload quotas, account or plan restrictions, safety checks, storage, and temporary service failures are not properties of the selected file.",
          "sourceIds": [
            "chatgpt-image-inputs"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "chatgpt-image-size",
        "chatgpt-image-formats",
        "chatgpt-still-gif"
      ],
      "referenceUrl": "/upload-requirements#chatgpt-image",
      "checkUrl": "/prepare-for-ai?destination=chatgpt-image"
    },
    {
      "schemaVersion": 1,
      "id": "chatgpt-pdf",
      "label": "ChatGPT PDF",
      "destination": "PDF attached to a ChatGPT conversation",
      "category": "ai-assistant",
      "appliesTo": [
        "document"
      ],
      "summary": "Check ChatGPT's published per-file size limit and PDF format, then inspect sampled pages for selectable text as quality guidance.",
      "reviewedOn": "2026-08-29",
      "nextReviewOn": "2026-11-29",
      "sources": [
        {
          "id": "chatgpt-file-uploads",
          "publisher": "OpenAI Help Center",
          "title": "File Uploads FAQ",
          "url": "https://help.openai.com/en/articles/8555545-file-uploads-with-gpt-4o",
          "official": true
        },
        {
          "id": "chatgpt-pdf-visual-retrieval",
          "publisher": "OpenAI Help Center",
          "title": "Visual Retrieval with PDFs FAQ",
          "url": "https://help.openai.com/en/articles/10416312-visual-retrieval-with-pdfs-faq",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "chatgpt-pdf-size",
          "kind": "requirement",
          "label": "Keep the PDF at 512 MB or less",
          "description": "OpenAI lists a 512 MB hard limit for each file uploaded to a ChatGPT conversation.",
          "sourceIds": [
            "chatgpt-file-uploads"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 512000000,
            "displayValue": "512 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. OpenAI publishes the limit as 512 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "chatgpt-pdf-format",
          "kind": "requirement",
          "label": "Use a PDF file",
          "description": "This focused preset checks a PDF attachment rather than combining the different rules for every document type ChatGPT can accept.",
          "sourceIds": [
            "chatgpt-file-uploads"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "pdf"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "chatgpt-pdf-searchable",
          "kind": "recommendation",
          "label": "Prefer selectable text when the words matter",
          "description": "OpenAI explains that document handling can use text retrieval and that embedded-image retrieval depends on the product plan, so a searchable text layer is a safer document baseline.",
          "sourceIds": [
            "chatgpt-file-uploads",
            "chatgpt-pdf-visual-retrieval"
          ],
          "check": {
            "type": "pdf-text",
            "requireSearchable": true,
            "applicableFormats": [
              "pdf"
            ],
            "coverage": "format-limited",
            "coverageNote": "JPEGConvert samples up to the first five pages. Later pages or mixed image-and-text PDFs can differ from the sample."
          }
        }
      ],
      "caveats": [
        {
          "id": "chatgpt-pdf-token-limit",
          "text": "ChatGPT also publishes a two-million-token limit for text and document files. File bytes do not reveal the exact tokens the service will count.",
          "sourceIds": [
            "chatgpt-file-uploads"
          ]
        },
        {
          "id": "chatgpt-pdf-plan-behavior",
          "text": "Whether embedded images and charts are analyzed can depend on the ChatGPT plan and product surface; a local PDF check cannot establish that behavior.",
          "sourceIds": [
            "chatgpt-pdf-visual-retrieval"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "chatgpt-pdf-size",
        "chatgpt-pdf-format",
        "chatgpt-pdf-searchable"
      ],
      "referenceUrl": "/upload-requirements#chatgpt-pdf",
      "checkUrl": "/prepare-for-ai?destination=chatgpt-pdf"
    },
    {
      "schemaVersion": 1,
      "id": "claude-chat-image",
      "label": "Claude chat image",
      "destination": "Image attached directly to a Claude chat",
      "category": "ai-assistant",
      "appliesTo": [
        "image"
      ],
      "summary": "Check Claude's image-specific claude.ai format, size, and pixel limits while keeping first-frame and visual-quality guidance separate.",
      "reviewedOn": "2026-08-29",
      "nextReviewOn": "2026-11-29",
      "sources": [
        {
          "id": "claude-vision",
          "publisher": "Anthropic",
          "title": "Vision requirements",
          "url": "https://platform.claude.com/docs/en/build-with-claude/vision",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "claude-image-size",
          "kind": "requirement",
          "label": "Keep the image at 10 MB or less",
          "description": "Anthropic's image-specific guidance lists a 10 MB maximum for images uploaded on claude.ai.",
          "sourceIds": [
            "claude-vision"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 10000000,
            "displayValue": "10 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. Anthropic publishes the limit as 10 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "claude-image-formats",
          "kind": "requirement",
          "label": "Use JPEG, PNG, GIF, or WebP",
          "description": "Anthropic lists JPEG, PNG, GIF, and WebP as supported image formats.",
          "sourceIds": [
            "claude-vision"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpg",
              "jpeg",
              "png",
              "gif",
              "webp"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "claude-image-dimensions",
          "kind": "requirement",
          "label": "Keep both image dimensions at 8,000 px or less",
          "description": "Anthropic states that images larger than 8,000 × 8,000 pixels are rejected.",
          "sourceIds": [
            "claude-vision"
          ],
          "check": {
            "type": "image-dimensions",
            "maxWidth": 8000,
            "maxHeight": 8000,
            "coverage": "complete"
          }
        },
        {
          "id": "claude-image-quality",
          "kind": "guidance",
          "label": "Keep important text clear and avoid heavy recompression",
          "description": "Anthropic notes that very small or rotated images and heavily compressed JPEG or WebP files can reduce visual understanding.",
          "sourceIds": [
            "claude-vision"
          ],
          "check": null
        },
        {
          "id": "claude-gif-first-frame",
          "kind": "guidance",
          "label": "Review the first GIF frame",
          "description": "Anthropic states that Claude analyzes only the first frame of an animated GIF.",
          "sourceIds": [
            "claude-vision"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "claude-image-count",
          "text": "Claude chat also applies message-level image and context limits that cannot be evaluated from one selected file.",
          "sourceIds": [
            "claude-vision"
          ]
        },
        {
          "id": "claude-image-understanding",
          "text": "Passing these local checks cannot prove that Claude will interpret text, objects, diagrams, or visual relationships correctly.",
          "sourceIds": [
            "claude-vision"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "claude-image-size",
        "claude-image-formats",
        "claude-image-dimensions"
      ],
      "referenceUrl": "/upload-requirements#claude-chat-image",
      "checkUrl": "/prepare-for-ai?destination=claude-chat-image"
    },
    {
      "schemaVersion": 1,
      "id": "claude-chat-pdf",
      "label": "Claude chat PDF",
      "destination": "PDF attached directly to a Claude chat",
      "category": "ai-assistant",
      "appliesTo": [
        "document"
      ],
      "summary": "Check Claude chat's general file-size and PDF page limits while separating its 100-page visual-analysis guidance from hard upload requirements.",
      "reviewedOn": "2026-08-29",
      "nextReviewOn": "2026-11-29",
      "sources": [
        {
          "id": "claude-file-uploads",
          "publisher": "Claude Help Center",
          "title": "Uploading files to Claude",
          "url": "https://support.claude.com/en/articles/8241126-upload-files-to-claude",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "claude-pdf-size",
          "kind": "requirement",
          "label": "Keep the chat PDF at 500 MB or less",
          "description": "Anthropic lists a 500 MB per-file limit for direct Claude chat uploads.",
          "sourceIds": [
            "claude-file-uploads"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 500000000,
            "displayValue": "500 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. Anthropic publishes the limit as 500 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "claude-pdf-format",
          "kind": "requirement",
          "label": "Use a PDF file",
          "description": "This preset applies the Claude chat PDF rules rather than the different behavior of non-PDF documents.",
          "sourceIds": [
            "claude-file-uploads"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "pdf"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "claude-pdf-pages",
          "kind": "requirement",
          "label": "Use no more than 1,000 PDF pages",
          "description": "Anthropic says Claude can process PDFs up to 1,000 pages.",
          "sourceIds": [
            "claude-file-uploads"
          ],
          "check": {
            "type": "pdf-pages",
            "maxPages": 1000,
            "applicableFormats": [
              "pdf"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "claude-pdf-visual-pages",
          "kind": "guidance",
          "label": "Keep visual-analysis PDFs at 100 pages or fewer",
          "description": "Anthropic says PDFs through 100 pages receive text and visual analysis, while pages 101 through 1,000 receive text-only processing.",
          "sourceIds": [
            "claude-file-uploads"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "claude-project-limit",
          "text": "Claude Projects use a separate 30 MB per-file limit. This preset is specifically for a file attached directly to a chat.",
          "sourceIds": [
            "claude-file-uploads"
          ]
        },
        {
          "id": "claude-context-limit",
          "text": "A technically valid PDF can still exceed the available conversation context or fail because of account, policy, or temporary service conditions.",
          "sourceIds": [
            "claude-file-uploads"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "claude-pdf-size",
        "claude-pdf-format",
        "claude-pdf-pages"
      ],
      "referenceUrl": "/upload-requirements#claude-chat-pdf",
      "checkUrl": "/prepare-for-ai?destination=claude-chat-pdf"
    },
    {
      "schemaVersion": 1,
      "id": "etsy-listing-photo",
      "label": "Etsy listing photo",
      "destination": "Photo added to an Etsy listing",
      "category": "marketplace",
      "appliesTo": [
        "image"
      ],
      "summary": "Check Etsy's supported image types and visible image features, then compare the photo with Etsy's published listing-image recommendations.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-14",
      "sources": [
        {
          "id": "etsy-shop-images",
          "publisher": "Etsy Help",
          "title": "Requirements and Best Practices for Images in Your Etsy Shop",
          "url": "https://help.etsy.com/hc/en-us/articles/115015663347-Requirements-and-Best-Practices-for-Images-in-Your-Etsy-Shop",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "supported-image-type",
          "kind": "requirement",
          "label": "Use an Etsy-supported image type",
          "description": "Etsy lists JPG, GIF, PNG, SVG, and HEIC as the image types supported in a shop.",
          "sourceIds": [
            "etsy-shop-images"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpg",
              "jpeg",
              "gif",
              "png",
              "svg",
              "heic"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "still-gif",
          "kind": "requirement",
          "label": "GIF images must be non-animated",
          "description": "Etsy says animated GIFs are not supported. This rule applies specifically to GIF and does not infer a separate APNG policy.",
          "sourceIds": [
            "etsy-shop-images"
          ],
          "check": {
            "type": "image-features",
            "allowAnimation": false,
            "applicableFormats": [
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "opaque-png",
          "kind": "requirement",
          "label": "Avoid transparent areas in PNG images",
          "description": "Etsy says transparent PNGs are not supported and their transparent areas can appear black. This automatic rule applies specifically to PNG.",
          "sourceIds": [
            "etsy-shop-images"
          ],
          "check": {
            "type": "image-features",
            "allowTransparency": false,
            "applicableFormats": [
              "png"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "listing-dimensions",
          "kind": "recommendation",
          "label": "Aim for at least 2,000 × 2,000 pixels",
          "description": "Etsy recommends that listing photos have both width and height of at least 2,000 pixels.",
          "sourceIds": [
            "etsy-shop-images"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 2000,
            "minHeight": 2000,
            "coverage": "complete"
          }
        },
        {
          "id": "first-photo-composition",
          "kind": "guidance",
          "label": "Keep the main subject centered with room for cropping",
          "description": "Etsy recommends a horizontal or square first photo and enough surrounding space for its square, portrait, and landscape thumbnail crops.",
          "sourceIds": [
            "etsy-shop-images"
          ],
          "check": null
        },
        {
          "id": "srgb-color",
          "kind": "guidance",
          "label": "Use sRGB when color consistency matters",
          "description": "Etsy recommends converting images to sRGB when uploaded colors do not match the source.",
          "sourceIds": [
            "etsy-shop-images"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "one-megabyte-guidance",
          "text": "Etsy warns that images over 1 MB may take longer or fail on slower connections, but it does not present 1 MB as a universal listing-photo maximum.",
          "sourceIds": [
            "etsy-shop-images"
          ]
        },
        {
          "id": "platform-processing",
          "text": "Etsy may compress, crop, auto-rotate, and convert color profiles after upload, so a matching source file can still look different on the listing.",
          "sourceIds": [
            "etsy-shop-images"
          ]
        },
        {
          "id": "listing-context",
          "text": "These checks do not evaluate Etsy content policies, listing quality, search placement, account status, or network conditions.",
          "sourceIds": [
            "etsy-shop-images"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "supported-image-type",
        "still-gif",
        "opaque-png",
        "listing-dimensions"
      ],
      "referenceUrl": "/upload-requirements#etsy-listing-photo",
      "checkUrl": "/check-my-file?destination=etsy-listing-photo"
    },
    {
      "schemaVersion": 1,
      "id": "gemini-apps-non-video-file",
      "label": "Gemini Apps non-video file",
      "destination": "Non-video file attached in the Gemini web or mobile app",
      "category": "ai-assistant",
      "appliesTo": [
        "image",
        "document",
        "audio",
        "archive",
        "text"
      ],
      "summary": "Check the published 100 MB limit for a non-video Gemini Apps file without inventing a complete format allowlist that Google does not publish.",
      "reviewedOn": "2026-08-29",
      "nextReviewOn": "2026-11-29",
      "sources": [
        {
          "id": "gemini-file-uploads",
          "publisher": "Google Gemini Apps Help",
          "title": "Upload and analyze files in Gemini Apps",
          "url": "https://support.google.com/gemini/answer/14903178?co=GENIE.Platform%3DDesktop&hl=en",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "gemini-non-video-size",
          "kind": "requirement",
          "label": "Keep a non-video file at 100 MB or less",
          "description": "Google lists a 100 MB maximum for supported non-video files in Gemini Apps. Video has a separate 2 GB limit and is outside this preset.",
          "sourceIds": [
            "gemini-file-uploads"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 100000000,
            "displayValue": "100 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. Google publishes the limit as 100 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "gemini-format-guidance",
          "kind": "guidance",
          "label": "Confirm the format in Gemini before changing it",
          "description": "Google says Gemini Apps supports most file types but does not publish a complete allowlist on the cited page, so this preset does not guess whether a format is accepted.",
          "sourceIds": [
            "gemini-file-uploads"
          ],
          "check": null
        },
        {
          "id": "gemini-context-guidance",
          "kind": "guidance",
          "label": "Use smaller focused files for complete analysis",
          "description": "Google notes that large uploads can cause Gemini to miss details or relationships spread across the content.",
          "sourceIds": [
            "gemini-file-uploads"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "gemini-video-separate",
          "text": "Gemini Apps publishes a separate 2 GB video limit. Do not use this 100 MB non-video preset to judge a video file.",
          "sourceIds": [
            "gemini-file-uploads"
          ]
        },
        {
          "id": "gemini-account-causes",
          "text": "Rolling quotas, stored-activity limits, Workspace administrator controls, context limits, and temporary parsing failures cannot be checked from the file alone.",
          "sourceIds": [
            "gemini-file-uploads"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "gemini-non-video-size"
      ],
      "referenceUrl": "/upload-requirements#gemini-apps-non-video-file",
      "checkUrl": "/prepare-for-ai?destination=gemini-apps-non-video-file"
    },
    {
      "schemaVersion": 1,
      "id": "gmail-attachment",
      "label": "Gmail attachment",
      "destination": "Personal Gmail message attachment",
      "category": "email",
      "appliesTo": [
        "file"
      ],
      "summary": "Check one file against Gmail's published personal-account attachment limit, while keeping the combined-message and account caveats visible.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-14",
      "sources": [
        {
          "id": "gmail-attachments",
          "publisher": "Google Gmail Help",
          "title": "Send attachments with your Gmail message",
          "url": "https://support.google.com/mail/answer/6584?hl=en",
          "official": true
        },
        {
          "id": "gmail-blocked-files",
          "publisher": "Google Gmail Help",
          "title": "File types blocked in Gmail",
          "url": "https://support.google.com/mail/answer/6590?hl=en",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "personal-account-attachment-total",
          "kind": "requirement",
          "label": "Keep the message's combined attachments within 25 MB",
          "description": "Google states that personal Gmail accounts can send up to 25 MB in attachments. This checker can compare the selected file with that amount, but it cannot see other attachments in the draft.",
          "sourceIds": [
            "gmail-attachments"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 25000000,
            "displayValue": "25 MB",
            "byteBasis": "decimal",
            "coverage": "partial",
            "coverageNote": "The published limit applies to all attachments in the message. A pass only confirms that this one selected file is no larger than the normalized 25 MB amount.",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. Google publishes the limit as 25 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "drive-link-fallback",
          "kind": "guidance",
          "label": "Expect a Google Drive link for a larger message",
          "description": "Gmail says it replaces attachments with a Google Drive link when their combined size exceeds the account limit.",
          "sourceIds": [
            "gmail-attachments"
          ],
          "check": null
        },
        {
          "id": "review-file-type",
          "kind": "guidance",
          "label": "Review Gmail's blocked-file rules",
          "description": "Gmail blocks listed dangerous file types, documents with malicious macros, and certain password-protected archives. The blocked list can change.",
          "sourceIds": [
            "gmail-blocked-files"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "combined-size",
          "text": "The 25 MB personal-account limit is for the combined attachments, not a promise that each individual 25 MB file will send.",
          "sourceIds": [
            "gmail-attachments"
          ]
        },
        {
          "id": "managed-accounts",
          "text": "Work and school account limits can be set by the Google Workspace administrator.",
          "sourceIds": [
            "gmail-attachments"
          ]
        },
        {
          "id": "security-and-delivery",
          "text": "A size match does not check Gmail security rules, the recipient's limits, storage availability, network conditions, or delivery.",
          "sourceIds": [
            "gmail-attachments",
            "gmail-blocked-files"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "personal-account-attachment-total"
      ],
      "referenceUrl": "/upload-requirements#gmail-attachment",
      "checkUrl": "/check-my-file?destination=gmail-attachment"
    },
    {
      "schemaVersion": 1,
      "id": "google-merchant-2027-image",
      "label": "Google Merchant image · 2027 readiness",
      "destination": "Google Merchant Center main or additional product image (image_link / additional_image_link)",
      "category": "marketplace",
      "appliesTo": [
        "image"
      ],
      "summary": "Check readiness for the 500-pixel minimum taking effect on 31 January 2027 across product categories and marketing methods.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-15",
      "effectiveFrom": "2027-01-31",
      "sources": [
        {
          "id": "image-link",
          "title": "Image link [image_link]",
          "url": "https://support.google.com/merchants/answer/6324350?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "product-data",
          "title": "Product data specification",
          "url": "https://support.google.com/merchants/answer/7052112?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "image-too-small",
          "title": "How to fix: Image too small",
          "url": "https://support.google.com/merchants/answer/12159030?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "update-2026",
          "title": "Merchant Center product data specification update 2026",
          "url": "https://support.google.com/merchants/answer/16989427?hl=en",
          "language": "en",
          "publishedOn": "2026-04-14",
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "unsupported-format",
          "title": "How to fix: Unsupported image type",
          "url": "https://support.google.com/merchants/answer/12159031?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "merchant-dimensions",
          "kind": "requirement",
          "label": "At least 500 × 500 pixels; no more than 64 megapixels",
          "description": "Both width and height must reach 500 pixels for this profile. The image may be rectangular; total width multiplied by height must not exceed 64,000,000 pixels.",
          "sourceIds": [
            "update-2026",
            "image-too-small",
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 500,
            "minHeight": 500,
            "maxPixels": 64000000,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-file-size",
          "kind": "requirement",
          "label": "Published limit: 16 MB",
          "description": "Google states a 16 MB ceiling without defining its byte multiplier. This profile checks a conservative 16,000,000-byte limit; a larger result is not proof of Google rejection.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 16000000,
            "displayValue": "16 MB",
            "byteBasis": "decimal",
            "sourceUnitDefinition": "unspecified",
            "normalizationNote": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
            "coverage": "partial",
            "coverageNote": "The published MB multiplier is unspecified. The local byte ceiling is conservative and does not establish Google’s exact boundary."
          }
        },
        {
          "id": "merchant-format",
          "kind": "requirement",
          "label": "Use one of Google’s six listed image formats",
          "description": "The product-data specification lists JPEG, WebP, PNG, non-animated GIF, BMP, and TIFF. The checker compares actual encoded format rather than trusting a renamed extension.",
          "sourceIds": [
            "product-data",
            "image-link"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpeg",
              "webp",
              "png",
              "gif",
              "bmp",
              "tiff"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-still-gif",
          "kind": "requirement",
          "label": "GIF images must be non-animated",
          "description": "Google explicitly limits GIF to non-animated images. This automatic animation rule applies only to GIF; it does not infer an animation policy for PNG or WebP.",
          "sourceIds": [
            "product-data"
          ],
          "check": {
            "type": "image-features",
            "allowAnimation": false,
            "applicableFormats": [
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-resolution-recommendation",
          "kind": "recommendation",
          "label": "Prefer an original at least 1500 × 1500 pixels",
          "description": "Google recommends this higher resolution for performance across listing formats. It is separate from the required minimum for the selected profile.",
          "sourceIds": [
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 1500,
            "minHeight": 1500,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-original-detail",
          "kind": "guidance",
          "label": "Choose a larger original when the image is too small",
          "description": "Google advises against enlarging thumbnails. Changing the pixel count alone cannot recover product detail or establish that an image meets its visual requirements.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-ai-metadata",
          "kind": "guidance",
          "label": "Preserve required AI-source metadata",
          "description": "Images created with generative AI need metadata declaring that source. Preserve existing IPTC DigitalSourceType declarations; conversion or metadata removal can erase them. This checker does not establish AI origin or validate those declarations.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-image-url",
          "kind": "guidance",
          "label": "Check the published image URL and matching extension",
          "description": "The live image URL must use HTTP or HTTPS, be crawlable, and use an extension matching the real image format. A local file result cannot check the live URL, robots rules, redirects, or recrawl status.",
          "sourceIds": [
            "image-link",
            "unsupported-format"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "merchant-date-scope",
          "text": "The 500 × 500 minimum begins on 31 January 2027 for all categories and marketing methods, including main and additional image links. Before then, ordinary non-apparel and apparel minimums differ; YouTube Shopping TV already requires 500 × 500.",
          "sourceIds": [
            "image-too-small",
            "update-2026"
          ]
        },
        {
          "id": "merchant-visual-review",
          "text": "Review the correct product and variant, overlays, borders, and image quality against Google’s full policy. These visual and account conditions are outside this local file check.",
          "sourceIds": [
            "image-link"
          ]
        },
        {
          "id": "merchant-byte-unit",
          "text": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that Google will accept, display, or rank the image.",
      "activeCheckRuleIds": [
        "merchant-dimensions",
        "merchant-file-size",
        "merchant-format",
        "merchant-still-gif"
      ],
      "referenceUrl": "/upload-requirements#google-merchant-2027-image",
      "checkUrl": "/check-my-file?destination=google-merchant-2027-image"
    },
    {
      "schemaVersion": 1,
      "id": "google-merchant-apparel-image",
      "label": "Google Merchant apparel image · until 30 Jan 2027",
      "destination": "Google Merchant Center main product image (image_link)",
      "category": "marketplace",
      "appliesTo": [
        "image"
      ],
      "summary": "Check the current apparel image minimum, formats, total pixels, and conservative byte limit before 31 January 2027.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-15",
      "effectiveUntil": "2027-01-30",
      "successorPresetId": "google-merchant-2027-image",
      "sources": [
        {
          "id": "image-link",
          "title": "Image link [image_link]",
          "url": "https://support.google.com/merchants/answer/6324350?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "product-data",
          "title": "Product data specification",
          "url": "https://support.google.com/merchants/answer/7052112?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "image-too-small",
          "title": "How to fix: Image too small",
          "url": "https://support.google.com/merchants/answer/12159030?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "update-2026",
          "title": "Merchant Center product data specification update 2026",
          "url": "https://support.google.com/merchants/answer/16989427?hl=en",
          "language": "en",
          "publishedOn": "2026-04-14",
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "unsupported-format",
          "title": "How to fix: Unsupported image type",
          "url": "https://support.google.com/merchants/answer/12159031?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "merchant-dimensions",
          "kind": "requirement",
          "label": "At least 250 × 250 pixels; no more than 64 megapixels",
          "description": "Both width and height must reach 250 pixels for this profile. The image may be rectangular; total width multiplied by height must not exceed 64,000,000 pixels.",
          "sourceIds": [
            "image-too-small",
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 250,
            "minHeight": 250,
            "maxPixels": 64000000,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-file-size",
          "kind": "requirement",
          "label": "Published limit: 16 MB",
          "description": "Google states a 16 MB ceiling without defining its byte multiplier. This profile checks a conservative 16,000,000-byte limit; a larger result is not proof of Google rejection.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 16000000,
            "displayValue": "16 MB",
            "byteBasis": "decimal",
            "sourceUnitDefinition": "unspecified",
            "normalizationNote": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
            "coverage": "partial",
            "coverageNote": "The published MB multiplier is unspecified. The local byte ceiling is conservative and does not establish Google’s exact boundary."
          }
        },
        {
          "id": "merchant-format",
          "kind": "requirement",
          "label": "Use one of Google’s six listed image formats",
          "description": "The product-data specification lists JPEG, WebP, PNG, non-animated GIF, BMP, and TIFF. The checker compares actual encoded format rather than trusting a renamed extension.",
          "sourceIds": [
            "product-data",
            "image-link"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpeg",
              "webp",
              "png",
              "gif",
              "bmp",
              "tiff"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-still-gif",
          "kind": "requirement",
          "label": "GIF images must be non-animated",
          "description": "Google explicitly limits GIF to non-animated images. This automatic animation rule applies only to GIF; it does not infer an animation policy for PNG or WebP.",
          "sourceIds": [
            "product-data"
          ],
          "check": {
            "type": "image-features",
            "allowAnimation": false,
            "applicableFormats": [
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-resolution-recommendation",
          "kind": "recommendation",
          "label": "Prefer an original at least 1500 × 1500 pixels",
          "description": "Google recommends this higher resolution for performance across listing formats. It is separate from the required minimum for the selected profile.",
          "sourceIds": [
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 1500,
            "minHeight": 1500,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-original-detail",
          "kind": "guidance",
          "label": "Choose a larger original when the image is too small",
          "description": "Google advises against enlarging thumbnails. Changing the pixel count alone cannot recover product detail or establish that an image meets its visual requirements.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-ai-metadata",
          "kind": "guidance",
          "label": "Preserve required AI-source metadata",
          "description": "Images created with generative AI need metadata declaring that source. Preserve existing IPTC DigitalSourceType declarations; conversion or metadata removal can erase them. This checker does not establish AI origin or validate those declarations.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-image-url",
          "kind": "guidance",
          "label": "Check the published image URL and matching extension",
          "description": "The live image URL must use HTTP or HTTPS, be crawlable, and use an extension matching the real image format. A local file result cannot check the live URL, robots rules, redirects, or recrawl status.",
          "sourceIds": [
            "image-link",
            "unsupported-format"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "merchant-date-scope",
          "text": "The 500 × 500 minimum begins on 31 January 2027 for all categories and marketing methods, including main and additional image links. Before then, ordinary non-apparel and apparel minimums differ; YouTube Shopping TV already requires 500 × 500.",
          "sourceIds": [
            "image-too-small",
            "update-2026"
          ]
        },
        {
          "id": "merchant-visual-review",
          "text": "Review the correct product and variant, overlays, borders, and image quality against Google’s full policy. These visual and account conditions are outside this local file check.",
          "sourceIds": [
            "image-link"
          ]
        },
        {
          "id": "merchant-byte-unit",
          "text": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that Google will accept, display, or rank the image.",
      "activeCheckRuleIds": [
        "merchant-dimensions",
        "merchant-file-size",
        "merchant-format",
        "merchant-still-gif"
      ],
      "referenceUrl": "/upload-requirements#google-merchant-apparel-image",
      "checkUrl": "/check-my-file?destination=google-merchant-apparel-image"
    },
    {
      "schemaVersion": 1,
      "id": "google-merchant-product-image",
      "label": "Google Merchant product image · until 30 Jan 2027",
      "destination": "Google Merchant Center main product image (image_link)",
      "category": "marketplace",
      "appliesTo": [
        "image"
      ],
      "summary": "Check the current non-apparel image minimum, formats, total pixels, and conservative byte limit before 31 January 2027.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-15",
      "effectiveUntil": "2027-01-30",
      "successorPresetId": "google-merchant-2027-image",
      "sources": [
        {
          "id": "image-link",
          "title": "Image link [image_link]",
          "url": "https://support.google.com/merchants/answer/6324350?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "product-data",
          "title": "Product data specification",
          "url": "https://support.google.com/merchants/answer/7052112?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "image-too-small",
          "title": "How to fix: Image too small",
          "url": "https://support.google.com/merchants/answer/12159030?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "update-2026",
          "title": "Merchant Center product data specification update 2026",
          "url": "https://support.google.com/merchants/answer/16989427?hl=en",
          "language": "en",
          "publishedOn": "2026-04-14",
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "unsupported-format",
          "title": "How to fix: Unsupported image type",
          "url": "https://support.google.com/merchants/answer/12159031?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "merchant-dimensions",
          "kind": "requirement",
          "label": "At least 100 × 100 pixels; no more than 64 megapixels",
          "description": "Both width and height must reach 100 pixels for this profile. The image may be rectangular; total width multiplied by height must not exceed 64,000,000 pixels.",
          "sourceIds": [
            "image-too-small",
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 100,
            "minHeight": 100,
            "maxPixels": 64000000,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-file-size",
          "kind": "requirement",
          "label": "Published limit: 16 MB",
          "description": "Google states a 16 MB ceiling without defining its byte multiplier. This profile checks a conservative 16,000,000-byte limit; a larger result is not proof of Google rejection.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 16000000,
            "displayValue": "16 MB",
            "byteBasis": "decimal",
            "sourceUnitDefinition": "unspecified",
            "normalizationNote": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
            "coverage": "partial",
            "coverageNote": "The published MB multiplier is unspecified. The local byte ceiling is conservative and does not establish Google’s exact boundary."
          }
        },
        {
          "id": "merchant-format",
          "kind": "requirement",
          "label": "Use one of Google’s six listed image formats",
          "description": "The product-data specification lists JPEG, WebP, PNG, non-animated GIF, BMP, and TIFF. The checker compares actual encoded format rather than trusting a renamed extension.",
          "sourceIds": [
            "product-data",
            "image-link"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpeg",
              "webp",
              "png",
              "gif",
              "bmp",
              "tiff"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-still-gif",
          "kind": "requirement",
          "label": "GIF images must be non-animated",
          "description": "Google explicitly limits GIF to non-animated images. This automatic animation rule applies only to GIF; it does not infer an animation policy for PNG or WebP.",
          "sourceIds": [
            "product-data"
          ],
          "check": {
            "type": "image-features",
            "allowAnimation": false,
            "applicableFormats": [
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-resolution-recommendation",
          "kind": "recommendation",
          "label": "Prefer an original at least 1500 × 1500 pixels",
          "description": "Google recommends this higher resolution for performance across listing formats. It is separate from the required minimum for the selected profile.",
          "sourceIds": [
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 1500,
            "minHeight": 1500,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-original-detail",
          "kind": "guidance",
          "label": "Choose a larger original when the image is too small",
          "description": "Google advises against enlarging thumbnails. Changing the pixel count alone cannot recover product detail or establish that an image meets its visual requirements.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-ai-metadata",
          "kind": "guidance",
          "label": "Preserve required AI-source metadata",
          "description": "Images created with generative AI need metadata declaring that source. Preserve existing IPTC DigitalSourceType declarations; conversion or metadata removal can erase them. This checker does not establish AI origin or validate those declarations.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-image-url",
          "kind": "guidance",
          "label": "Check the published image URL and matching extension",
          "description": "The live image URL must use HTTP or HTTPS, be crawlable, and use an extension matching the real image format. A local file result cannot check the live URL, robots rules, redirects, or recrawl status.",
          "sourceIds": [
            "image-link",
            "unsupported-format"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "merchant-date-scope",
          "text": "The 500 × 500 minimum begins on 31 January 2027 for all categories and marketing methods, including main and additional image links. Before then, ordinary non-apparel and apparel minimums differ; YouTube Shopping TV already requires 500 × 500.",
          "sourceIds": [
            "image-too-small",
            "update-2026"
          ]
        },
        {
          "id": "merchant-visual-review",
          "text": "Review the correct product and variant, overlays, borders, and image quality against Google’s full policy. These visual and account conditions are outside this local file check.",
          "sourceIds": [
            "image-link"
          ]
        },
        {
          "id": "merchant-byte-unit",
          "text": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that Google will accept, display, or rank the image.",
      "activeCheckRuleIds": [
        "merchant-dimensions",
        "merchant-file-size",
        "merchant-format",
        "merchant-still-gif"
      ],
      "referenceUrl": "/upload-requirements#google-merchant-product-image",
      "checkUrl": "/check-my-file?destination=google-merchant-product-image"
    },
    {
      "schemaVersion": 1,
      "id": "google-merchant-youtube-tv-image",
      "label": "Google Merchant · YouTube Shopping TV",
      "destination": "Google Merchant Center main product image (image_link)",
      "category": "marketplace",
      "appliesTo": [
        "image"
      ],
      "summary": "Check the existing 500-pixel minimum for YouTube Shopping TV delivery, along with formats, total pixels, and the conservative byte limit.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-15",
      "sources": [
        {
          "id": "image-link",
          "title": "Image link [image_link]",
          "url": "https://support.google.com/merchants/answer/6324350?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "product-data",
          "title": "Product data specification",
          "url": "https://support.google.com/merchants/answer/7052112?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "image-too-small",
          "title": "How to fix: Image too small",
          "url": "https://support.google.com/merchants/answer/12159030?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "update-2026",
          "title": "Merchant Center product data specification update 2026",
          "url": "https://support.google.com/merchants/answer/16989427?hl=en",
          "language": "en",
          "publishedOn": "2026-04-14",
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        },
        {
          "id": "unsupported-format",
          "title": "How to fix: Unsupported image type",
          "url": "https://support.google.com/merchants/answer/12159031?hl=en",
          "language": "en",
          "publishedOn": null,
          "reviewedOn": "2026-09-05",
          "publisher": "Google Merchant Center Help",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "merchant-dimensions",
          "kind": "requirement",
          "label": "At least 500 × 500 pixels; no more than 64 megapixels",
          "description": "Both width and height must reach 500 pixels for this profile. The image may be rectangular; total width multiplied by height must not exceed 64,000,000 pixels.",
          "sourceIds": [
            "image-too-small",
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 500,
            "minHeight": 500,
            "maxPixels": 64000000,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-file-size",
          "kind": "requirement",
          "label": "Published limit: 16 MB",
          "description": "Google states a 16 MB ceiling without defining its byte multiplier. This profile checks a conservative 16,000,000-byte limit; a larger result is not proof of Google rejection.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 16000000,
            "displayValue": "16 MB",
            "byteBasis": "decimal",
            "sourceUnitDefinition": "unspecified",
            "normalizationNote": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
            "coverage": "partial",
            "coverageNote": "The published MB multiplier is unspecified. The local byte ceiling is conservative and does not establish Google’s exact boundary."
          }
        },
        {
          "id": "merchant-format",
          "kind": "requirement",
          "label": "Use one of Google’s six listed image formats",
          "description": "The product-data specification lists JPEG, WebP, PNG, non-animated GIF, BMP, and TIFF. The checker compares actual encoded format rather than trusting a renamed extension.",
          "sourceIds": [
            "product-data",
            "image-link"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpeg",
              "webp",
              "png",
              "gif",
              "bmp",
              "tiff"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-still-gif",
          "kind": "requirement",
          "label": "GIF images must be non-animated",
          "description": "Google explicitly limits GIF to non-animated images. This automatic animation rule applies only to GIF; it does not infer an animation policy for PNG or WebP.",
          "sourceIds": [
            "product-data"
          ],
          "check": {
            "type": "image-features",
            "allowAnimation": false,
            "applicableFormats": [
              "gif"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-resolution-recommendation",
          "kind": "recommendation",
          "label": "Prefer an original at least 1500 × 1500 pixels",
          "description": "Google recommends this higher resolution for performance across listing formats. It is separate from the required minimum for the selected profile.",
          "sourceIds": [
            "image-link"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 1500,
            "minHeight": 1500,
            "coverage": "complete"
          }
        },
        {
          "id": "merchant-original-detail",
          "kind": "guidance",
          "label": "Choose a larger original when the image is too small",
          "description": "Google advises against enlarging thumbnails. Changing the pixel count alone cannot recover product detail or establish that an image meets its visual requirements.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-ai-metadata",
          "kind": "guidance",
          "label": "Preserve required AI-source metadata",
          "description": "Images created with generative AI need metadata declaring that source. Preserve existing IPTC DigitalSourceType declarations; conversion or metadata removal can erase them. This checker does not establish AI origin or validate those declarations.",
          "sourceIds": [
            "image-link",
            "product-data"
          ],
          "check": null
        },
        {
          "id": "merchant-image-url",
          "kind": "guidance",
          "label": "Check the published image URL and matching extension",
          "description": "The live image URL must use HTTP or HTTPS, be crawlable, and use an extension matching the real image format. A local file result cannot check the live URL, robots rules, redirects, or recrawl status.",
          "sourceIds": [
            "image-link",
            "unsupported-format"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "merchant-date-scope",
          "text": "The 500 × 500 minimum begins on 31 January 2027 for all categories and marketing methods, including main and additional image links. Before then, ordinary non-apparel and apparel minimums differ; YouTube Shopping TV already requires 500 × 500.",
          "sourceIds": [
            "image-too-small",
            "update-2026"
          ]
        },
        {
          "id": "merchant-visual-review",
          "text": "Review the correct product and variant, overlays, borders, and image quality against Google’s full policy. These visual and account conditions are outside this local file check.",
          "sourceIds": [
            "image-link"
          ]
        },
        {
          "id": "merchant-byte-unit",
          "text": "Google does not define the MB byte multiplier in the reviewed sources. 16,000,000 bytes is a conservative local check, not an exact Google threshold. Results above it require an explicit unit-ambiguity note.",
          "sourceIds": [
            "image-link",
            "image-too-small"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that Google will accept, display, or rank the image.",
      "activeCheckRuleIds": [
        "merchant-dimensions",
        "merchant-file-size",
        "merchant-format",
        "merchant-still-gif"
      ],
      "referenceUrl": "/upload-requirements#google-merchant-youtube-tv-image",
      "checkUrl": "/check-my-file?destination=google-merchant-youtube-tv-image"
    },
    {
      "schemaVersion": 1,
      "id": "linkedin-profile-photo",
      "label": "LinkedIn profile photo",
      "destination": "LinkedIn profile photo upload",
      "category": "professional-profile",
      "appliesTo": [
        "image"
      ],
      "summary": "Check LinkedIn's published profile-photo size, pixel, and file-type specifications while keeping content and cropping guidance separate.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-14",
      "sources": [
        {
          "id": "linkedin-photo-upload",
          "publisher": "LinkedIn Help",
          "title": "Photo won't upload to your profile",
          "url": "https://www.linkedin.com/help/linkedin/answer/a549049/photo-won-t-upload-to-your-profile?lang=en",
          "official": true
        },
        {
          "id": "linkedin-photo-guidelines",
          "publisher": "LinkedIn Help",
          "title": "Profile photo guidelines and conditions",
          "url": "https://www.linkedin.com/help/linkedin/answer/a1377087?lang=en",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "profile-photo-size",
          "kind": "requirement",
          "label": "Keep the file at 8 MB or less",
          "description": "LinkedIn lists 8 MB as the maximum profile-photo file size.",
          "sourceIds": [
            "linkedin-photo-upload"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 8000000,
            "displayValue": "8 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. LinkedIn publishes the limit as 8 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "profile-photo-format",
          "kind": "requirement",
          "label": "Use JPG or PNG",
          "description": "LinkedIn says a profile photo file must be PNG or JPG and does not support GIF for this use.",
          "sourceIds": [
            "linkedin-photo-upload"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpg",
              "jpeg",
              "png"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "profile-photo-dimensions",
          "kind": "requirement",
          "label": "Stay within LinkedIn's profile-photo pixel range",
          "description": "LinkedIn lists a profile-photo range from 400 × 400 pixels through 7,680 × 4,320 pixels.",
          "sourceIds": [
            "linkedin-photo-upload"
          ],
          "check": {
            "type": "image-dimensions",
            "minWidth": 400,
            "minHeight": 400,
            "maxWidth": 7680,
            "maxHeight": 4320,
            "coverage": "complete"
          }
        },
        {
          "id": "leave-crop-room",
          "kind": "recommendation",
          "label": "Choose a photo that needs little cropping",
          "description": "LinkedIn recommends adding a photo that will not require substantial cropping and provides an editor after upload.",
          "sourceIds": [
            "linkedin-photo-upload"
          ],
          "check": null
        },
        {
          "id": "reflect-likeness",
          "kind": "guidance",
          "label": "Use an image that reflects your likeness",
          "description": "LinkedIn permits photographs and artistic representations, but says the profile photo must reflect the member's likeness and comply with its profile-photo conditions.",
          "sourceIds": [
            "linkedin-photo-guidelines"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "content-policy",
          "text": "Technical file checks do not establish that a photo follows LinkedIn's likeness, community, copyright, or account policies.",
          "sourceIds": [
            "linkedin-photo-guidelines"
          ]
        },
        {
          "id": "display-crop",
          "text": "LinkedIn can crop or reposition the image in its editor, so meeting the pixel range does not prove how the final circular profile image will look.",
          "sourceIds": [
            "linkedin-photo-upload"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "profile-photo-size",
        "profile-photo-format",
        "profile-photo-dimensions"
      ],
      "referenceUrl": "/upload-requirements#linkedin-profile-photo",
      "checkUrl": "/check-my-file?destination=linkedin-profile-photo"
    },
    {
      "schemaVersion": 1,
      "id": "openai-transcription-api",
      "label": "OpenAI transcription API",
      "destination": "Audio or video file sent to the OpenAI transcription endpoint",
      "category": "ai-assistant",
      "appliesTo": [
        "audio",
        "video"
      ],
      "summary": "Check the OpenAI transcription endpoint's published request size and locally recognizable media formats without inventing bitrate or sample-rate requirements.",
      "reviewedOn": "2026-08-29",
      "nextReviewOn": "2026-11-29",
      "sources": [
        {
          "id": "openai-speech-to-text",
          "publisher": "OpenAI Developers",
          "title": "File transcription",
          "url": "https://developers.openai.com/api/docs/guides/speech-to-text",
          "official": true
        },
        {
          "id": "openai-transcription-reference",
          "publisher": "OpenAI Developers",
          "title": "Create transcription",
          "url": "https://developers.openai.com/api/reference/resources/audio/subresources/transcriptions/methods/create",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "openai-transcription-size",
          "kind": "requirement",
          "label": "Keep the request file at 25 MB or less",
          "description": "OpenAI documents a 25 MB file-upload limit for speech-to-text requests.",
          "sourceIds": [
            "openai-speech-to-text"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 25000000,
            "displayValue": "25 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. OpenAI publishes the limit as 25 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "openai-transcription-formats",
          "kind": "requirement",
          "label": "Use a supported audio or video container",
          "description": "The endpoint reference lists FLAC, MP3, MP4, MPEG, MPGA, M4A, OGG, WAV, and WebM. JPEGConvert can automatically recognize the seven corresponding format families listed in this check; MPEG and MPGA audio are commonly detected as MP3-compatible MPEG audio.",
          "sourceIds": [
            "openai-transcription-reference"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "flac",
              "mp3",
              "mp4",
              "m4a",
              "ogg",
              "wav",
              "webm"
            ],
            "coverage": "partial",
            "coverageNote": "The cited endpoint also accepts MPEG and MPGA extensions. JPEGConvert may normalize their recognizable audio contents as MP3 or leave an unusual container for manual checking."
          }
        },
        {
          "id": "openai-transcription-splitting",
          "kind": "guidance",
          "label": "Split oversized recordings at natural boundaries",
          "description": "OpenAI recommends splitting longer inputs when they exceed the upload limit and avoiding mid-sentence cuts when context matters.",
          "sourceIds": [
            "openai-speech-to-text"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "openai-transcription-stream",
          "text": "A supported MP4 or WebM container still needs usable audio. This local check does not currently prove that an audio stream is present.",
          "sourceIds": [
            "openai-transcription-reference"
          ]
        },
        {
          "id": "openai-transcription-api-causes",
          "text": "Authentication, billing, rate limits, model availability, request parameters, and network failures are API conditions rather than file properties.",
          "sourceIds": [
            "openai-transcription-reference"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "openai-transcription-size",
        "openai-transcription-formats"
      ],
      "referenceUrl": "/upload-requirements#openai-transcription-api",
      "checkUrl": "/prepare-for-ai?destination=openai-transcription-api"
    },
    {
      "schemaVersion": 1,
      "id": "usajobs-pdf-resume",
      "label": "USAJOBS resume",
      "destination": "Resume uploaded to a USAJOBS profile",
      "category": "job-application",
      "appliesTo": [
        "document"
      ],
      "summary": "Check USAJOBS' published size and page requirements and its PDF recommendation without claiming that PDF is the only accepted format.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-14",
      "sources": [
        {
          "id": "usajobs-resume-upload",
          "publisher": "USAJOBS Help Center",
          "title": "How to add a resume to your profile",
          "url": "https://help.usajobs.gov/how-to/account/documents/resume",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "resume-size",
          "kind": "requirement",
          "label": "Keep the resume at 5 MB or less",
          "description": "USAJOBS states that an uploaded resume must be 5 MB or less.",
          "sourceIds": [
            "usajobs-resume-upload"
          ],
          "check": {
            "type": "file-size",
            "maxBytes": 5000000,
            "displayValue": "5 MB",
            "byteBasis": "decimal",
            "coverage": "complete",
            "normalizationNote": "JPEGConvert treats 1 MB as 1,000,000 bytes. USAJOBS publishes the limit as 5 MB without defining a byte basis on the cited page."
          }
        },
        {
          "id": "resume-pages",
          "kind": "requirement",
          "label": "Use no more than two pages",
          "description": "USAJOBS states that a resume uploaded or built in the profile must be two pages or less.",
          "sourceIds": [
            "usajobs-resume-upload"
          ],
          "check": {
            "type": "pdf-pages",
            "maxPages": 2,
            "applicableFormats": [
              "pdf"
            ],
            "coverage": "format-limited",
            "coverageNote": "JPEGConvert can count pages in a readable PDF. It cannot reliably calculate the rendered page count of every other accepted document format."
          }
        },
        {
          "id": "accepted-file-types",
          "kind": "requirement",
          "label": "Use a file type listed by USAJOBS",
          "description": "USAJOBS lists PDF, GIF, JPG, JPEG, PNG, RTF, TXT, ODT, DOC, and DOCX as accepted resume upload formats, while excluding PDF portfolio files.",
          "sourceIds": [
            "usajobs-resume-upload"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "pdf",
              "gif",
              "jpg",
              "jpeg",
              "png",
              "rtf",
              "txt",
              "odt",
              "doc",
              "docx"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "pdf-recommended",
          "kind": "recommendation",
          "label": "Prefer a standard PDF to preserve formatting",
          "description": "USAJOBS recommends PDF to maintain formatting and page count. PDF is recommended, not required.",
          "sourceIds": [
            "usajobs-resume-upload"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "pdf"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "job-announcement",
          "kind": "guidance",
          "label": "Read the job announcement before submitting",
          "description": "USAJOBS requires the resume to meet the requirements in the specific job announcement, which this file check cannot know.",
          "sourceIds": [
            "usajobs-resume-upload"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "pdf-portfolio",
          "text": "USAJOBS accepts standard PDFs but says it does not accept PDF portfolio files.",
          "sourceIds": [
            "usajobs-resume-upload"
          ]
        },
        {
          "id": "agency-system",
          "text": "Some agencies do not accept resumes through USAJOBS and may send applicants to a separate agency system with different rules.",
          "sourceIds": [
            "usajobs-resume-upload"
          ]
        },
        {
          "id": "content-not-checked",
          "text": "Matching file size, type, and PDF page count does not check required resume content, accessibility, formatting quality, or job-specific instructions.",
          "sourceIds": [
            "usajobs-resume-upload"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "resume-size",
        "resume-pages",
        "accepted-file-types"
      ],
      "referenceUrl": "/upload-requirements#usajobs-pdf-resume",
      "checkUrl": "/check-my-file?destination=usajobs-pdf-resume"
    },
    {
      "schemaVersion": 1,
      "id": "website-jpg-png-fallback",
      "label": "Website JPG or PNG fallback",
      "destination": "Fallback image served by a website",
      "category": "website",
      "appliesTo": [
        "image"
      ],
      "summary": "Choose a broadly supported JPG or PNG fallback based on whether the image is photographic or needs precise edges or transparency.",
      "reviewedOn": "2026-09-05",
      "nextReviewOn": "2027-01-14",
      "sources": [
        {
          "id": "mdn-image-types",
          "publisher": "MDN Web Docs",
          "title": "Image file type and format guide",
          "url": "https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types",
          "official": true
        }
      ],
      "rules": [
        {
          "id": "jpg-or-png-fallback",
          "kind": "recommendation",
          "label": "Use JPG or PNG as the compatibility fallback",
          "description": "MDN identifies JPEG and PNG as broadly supported formats and recommends them as fallbacks when a newer image format is served first.",
          "sourceIds": [
            "mdn-image-types"
          ],
          "check": {
            "type": "formats",
            "allowedFormats": [
              "jpg",
              "jpeg",
              "png"
            ],
            "coverage": "complete"
          }
        },
        {
          "id": "jpg-for-photographs",
          "kind": "guidance",
          "label": "Prefer JPG for ordinary photographs",
          "description": "MDN describes JPEG as a strong compatibility choice for photographs when lossy compression is acceptable.",
          "sourceIds": [
            "mdn-image-types"
          ],
          "check": null
        },
        {
          "id": "png-for-precision",
          "kind": "guidance",
          "label": "Prefer PNG for transparency or precise edges",
          "description": "MDN recommends PNG when transparency or more precise reproduction is important, including screenshots and text-heavy graphics.",
          "sourceIds": [
            "mdn-image-types"
          ],
          "check": null
        },
        {
          "id": "picture-element",
          "kind": "guidance",
          "label": "Serve modern formats with a real fallback",
          "description": "MDN recommends the HTML picture element when a site provides modern formats alongside a more compatible fallback.",
          "sourceIds": [
            "mdn-image-types"
          ],
          "check": null
        }
      ],
      "caveats": [
        {
          "id": "not-an-upload-rule",
          "text": "This is web compatibility guidance, not a universal website upload requirement. A CMS, CDN, host, theme, or client specification can impose different rules.",
          "sourceIds": [
            "mdn-image-types"
          ]
        },
        {
          "id": "format-tradeoff",
          "text": "JPG does not preserve transparency and uses lossy compression. PNG preserves transparency and sharp edges but can be larger for photographs.",
          "sourceIds": [
            "mdn-image-types"
          ]
        }
      ],
      "acceptanceDisclaimer": "Passing these checks means the file matches the documented rules that JPEGConvert can evaluate. It does not guarantee that the destination will accept, display, send, or rank the file.",
      "activeCheckRuleIds": [
        "jpg-or-png-fallback"
      ],
      "referenceUrl": "/upload-requirements#website-jpg-png-fallback",
      "checkUrl": "/check-my-file?destination=website-jpg-png-fallback"
    }
  ]
}
