{
  "openapi": "3.0.1",
  "info": {
    "title": "Listing SEO Auditor for Etsy sellers",
    "description": "Audit one Etsy listing, a batch, or up to 100 authorized shop listings using official Etsy API data: readiness scoring, prioritized fixes, Gemini-powered title/tag/description suggestions, and a printable HTML report. Search rank and page-one competitors via your own authorized browser capture.",
    "version": "0.1",
    "x-build-id": "n5cN7NmoW1vndTAUS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/wheaten_steelpan~listing-seo-auditor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-wheaten_steelpan-listing-seo-auditor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/wheaten_steelpan~listing-seo-auditor/runs": {
      "post": {
        "operationId": "runs-sync-wheaten_steelpan-listing-seo-auditor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/wheaten_steelpan~listing-seo-auditor/run-sync": {
      "post": {
        "operationId": "run-sync-wheaten_steelpan-listing-seo-auditor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "confirmAuthorizedListing",
          "acceptTerms"
        ],
        "properties": {
          "confirmAuthorizedListing": {
            "title": "I am authorized to audit this listing",
            "type": "boolean",
            "description": "Confirm that you own, manage, or are otherwise authorized to audit every submitted listing and shop.",
            "default": false
          },
          "acceptTerms": {
            "title": "I accept the Terms and Privacy Policy",
            "type": "boolean",
            "description": "Required before the audit runs. Terms: https://listing-seo-auditor.netlify.app/terms/ · Privacy: https://listing-seo-auditor.netlify.app/privacy/",
            "default": false
          },
          "listingUrl": {
            "title": "Etsy listing URL",
            "pattern": "^(\\d+|https?://.*etsy\\.com/.*listing/\\d+.*)$",
            "type": "string",
            "description": "One Etsy listing to audit. Paste the full listing URL (https://www.etsy.com/listing/1234567890/my-product) or just the listing ID (1234567890). Shop or search URLs are not accepted. Leave blank when using the batch or whole-shop fields below."
          },
          "targetKeyword": {
            "title": "Buyer search phrase",
            "type": "string",
            "description": "The buyer phrase for the single listing above. The market snapshot observes this phrase's current search results and autocomplete wording."
          },
          "audits": {
            "title": "Batch of listings (optional)",
            "type": "array",
            "description": "Audit several authorized listings in one run. Each item needs listingUrl and targetKeyword. Duplicate listing IDs are removed. Up to 100 listings total per run.",
            "items": {
              "type": "object",
              "properties": {
                "listingUrl": {
                  "type": "string",
                  "title": "Listing URL or ID",
                  "description": "An authorized public Etsy listing URL or numeric ID."
                },
                "targetKeyword": {
                  "type": "string",
                  "title": "Buyer phrase",
                  "description": "The phrase to audit and observe in the Etsy market snapshot."
                }
              },
              "required": [
                "listingUrl",
                "targetKeyword"
              ]
            }
          },
          "shopName": {
            "title": "Exact Etsy shop name (optional)",
            "type": "string",
            "description": "Loads the shop's active listings through the Etsy API and audits up to Max listings. A buyer phrase is derived from each listing's first multi-word tag or title and clearly labeled for seller review."
          },
          "maxListings": {
            "title": "Max shop listings",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many active shop listings to audit. Each completed listing is charged as one audit.",
            "default": 10
          },
          "includeMarketIntelligence": {
            "title": "Capture market intelligence",
            "type": "boolean",
            "description": "Off by default: Etsy challenges the cloud browser, so this usually returns no rank data and adds about a minute to the run. To get rank, page-one competitors and autocomplete reliably, capture them in your own authorized browser and paste them into \"Authorized browser captures\" below. Turn this on only to attempt a live capture anyway.",
            "default": false
          },
          "marketIntelligenceLimit": {
            "title": "Max market snapshots",
            "minimum": 0,
            "maximum": 25,
            "type": "integer",
            "description": "Browser snapshots are slower than API audits. Capture them for the first 1–25 listings; remaining listings still receive the full API readiness audit.",
            "default": 10
          },
          "searchPages": {
            "title": "Search pages per phrase",
            "minimum": 1,
            "maximum": 2,
            "type": "integer",
            "description": "One page is enough for rank and page-one competition; two pages improve keyword-language evidence.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is recommended for stable storefront snapshots. Your chosen proxy/session affects observed rank and is recorded as context.",
            "default": {
              "useApifyProxy": true
            }
          },
          "marketSnapshots": {
            "title": "Authorized browser captures (how to get rank data)",
            "type": "array",
            "description": "The reliable route to rank, autocomplete and page-one competitors. Capture a search snapshot in your own authorized browser and paste it here; it feeds the same report without bypassing Etsy's challenge. Each item needs listingUrl, targetKeyword (matching the audit phrase exactly) and snapshotJson.",
            "items": {
              "type": "object",
              "properties": {
                "listingUrl": {
                  "type": "string",
                  "title": "Listing URL or ID",
                  "description": "The listing this market snapshot belongs to."
                },
                "targetKeyword": {
                  "type": "string",
                  "title": "Buyer phrase",
                  "description": "Must exactly match the searchCapture keyword."
                },
                "snapshotJson": {
                  "type": "string",
                  "title": "Snapshot JSON",
                  "description": "JSON containing searchCapture plus optional autocomplete and context."
                }
              },
              "required": [
                "listingUrl",
                "targetKeyword",
                "snapshotJson"
              ]
            }
          },
          "useAi": {
            "title": "Generate suggested copy with AI",
            "type": "boolean",
            "description": "When on, the listing's own API content is sent to Google's Gemini API, which writes the wording of the recommendations. Turn it off to receive the deterministic score and findings with no model call and no third-party processing.",
            "default": true
          },
          "geminiApiKey": {
            "title": "Your own Gemini API key (optional)",
            "type": "string",
            "description": "Supply your own key to run generation on your Google account under your own terms. It overrides the managed key, is never logged or stored, and lowers the per-audit charge."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}