{
  "openapi": "3.0.1",
  "info": {
    "title": "Novica Artist & Artwork Scraper",
    "description": "Scrape Novica.com fair-trade artisan products (jewelry, home decor, clothing, and more, with price, discount, country-of-origin, and materials) and artisan profiles (bio, specialty, rating, real total-item count), with built-in delta mode. No login required.",
    "version": "0.1",
    "x-build-id": "HfQdATP6mhsWMweez"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/artsiom_k~novica-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-artsiom_k-novica-scraper",
        "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/artsiom_k~novica-scraper/runs": {
      "post": {
        "operationId": "runs-sync-artsiom_k-novica-scraper",
        "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/artsiom_k~novica-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-artsiom_k-novica-scraper",
        "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",
        "properties": {
          "entityType": {
            "title": "Entity type",
            "enum": [
              "artworks",
              "artists"
            ],
            "type": "string",
            "description": "Scrape products (handcrafted jewelry, home decor, clothing, etc., with price/discount, country-of-origin, and materials) or artisan profiles (bio, specialty, rating, and a real total-item count — no extra fan-out cost). See dataset_schema.json for the field set of each.",
            "default": "artworks"
          },
          "categories": {
            "title": "Categories to scrape",
            "type": "array",
            "description": "Optional: restrict the crawl to specific categories. A top-level category like \"Jewelry\" already includes every narrower subcategory (anklets, bracelets, necklaces, ...) combined. Leave empty to crawl the entire site (every category listed here, discovered fresh from novica.com's own navigation at build time — see novica-scraper's docs if the site adds a new one later). Applies to both entity types.",
            "items": {
              "type": "string",
              "enum": [
                "jewelry",
                "jewelry-boxes",
                "birthstone-jewelry",
                "fashion",
                "clothing",
                "accessories",
                "handbags",
                "home-decor",
                "decor-accessories",
                "games-and-puzzles",
                "musical-instruments",
                "vases",
                "gadgets-and-gear",
                "holiday-decor-and-ornaments",
                "pet-supplies",
                "home-furnishings",
                "area-rugs",
                "furniture",
                "hammock",
                "lamps-and-lighting",
                "mirrors",
                "outdoor-living",
                "bedding-and-bath",
                "wall-decor",
                "masks",
                "sculpture",
                "kitchen-and-dining",
                "paintings",
                "clean-beauty",
                "face-masks",
                "unique-gifts",
                "gift-sets",
                "anniversary-gifts",
                "wedding-gifts",
                "corporate-gifts",
                "eco-friendly-gifts",
                "newarrivals",
                "outlet",
                "catalog-collection",
                "summer",
                "overcome-adversity",
                "overcome-cancer",
                "preserve-traditions",
                "support-conservation",
                "support-microcredit-borrowers",
                "uplift-communities",
                "work-with-disabilities",
                "africa",
                "andes",
                "armenia",
                "bali-and-java",
                "brazil",
                "central-america",
                "costa-rica",
                "guanajuato",
                "india",
                "ireland",
                "mexico",
                "silk-road",
                "thailand"
              ],
              "enumTitles": [
                "Jewelry",
                "Jewelry Boxes",
                "Birthstone Jewelry",
                "Fashion",
                "Clothing",
                "Accessories",
                "Handbags",
                "Home Decor",
                "Decor Accessories",
                "Games & Puzzles",
                "Musical Instruments",
                "Vases",
                "Gadgets & Gear",
                "Holiday Decor & Ornaments",
                "Pet Supplies",
                "Home Furnishings",
                "Area Rugs",
                "Furniture",
                "Hammocks",
                "Lamps & Lighting",
                "Mirrors",
                "Outdoor Living",
                "Bedding & Bath",
                "Wall Decor",
                "Decorative Masks",
                "Sculpture",
                "Kitchen & Dining",
                "Paintings",
                "Clean Beauty",
                "Face Masks (Beauty)",
                "Unique Gifts",
                "Gift Sets",
                "Anniversary Gifts",
                "Wedding Gifts",
                "Corporate Gifts",
                "Eco-Friendly Gifts",
                "New Arrivals",
                "Outlet / Sale",
                "Catalog Collection",
                "Summer Collection",
                "Cause: Overcome Adversity",
                "Cause: Overcome Cancer",
                "Cause: Preserve Traditions",
                "Cause: Support Conservation",
                "Cause: Support Microcredit Borrowers",
                "Cause: Uplift Communities",
                "Cause: Work With Disabilities",
                "Region: Africa",
                "Region: The Andes",
                "Region: Armenia",
                "Region: Bali & Java",
                "Region: Brazil",
                "Region: Central America",
                "Region: Costa Rica",
                "Region: Guanajuato (Mexico)",
                "Region: India",
                "Region: Ireland",
                "Region: Mexico",
                "Region: Silk Road",
                "Region: Thailand"
              ]
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional list of specific Novica product (https://www.novica.com/p/{slug}/{id}/) or artisan (https://www.novica.com/a/{slug}/{id}/) URLs to scrape directly, instead of discovering via categories — use whichever kind matches entityType. Overrides \"Categories to scrape\". A startUrls-scoped run cannot detect delistings or update the incremental baseline.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after pushing this many dataset items. Defaults to 50 — a fast, cheap preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. The full site has tens of thousands of products across ~2,000 artisans (Novica's own count). Raise this or clear it (set to null) for a full run, or narrow \"Categories to scrape\" instead.",
            "default": 50
          },
          "mode": {
            "title": "Incremental mode",
            "enum": [
              "auto",
              "full",
              "incremental"
            ],
            "type": "string",
            "description": "\"auto\" (recommended): full scan on the first run for a given entityType/scope, incremental (new/changed only) afterwards. \"full\": always push every item and refresh the baseline — schedule this periodically to catch delistings, price changes, and sold-out transitions. \"incremental\": always push only new/changed items. Only a plain, unscoped run (no startUrls, and the same \"Categories to scrape\" every time) can detect delistings or update the baseline.",
            "default": "auto"
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "How many product/artisan detail pages to fetch in parallel. Defaults to 15 — validated live against novica.com with zero blocking at concurrency 30 (no anti-bot layer found on this site at all). Lower it only if you start seeing errors.",
            "default": 15
          },
          "impersonate": {
            "title": "TLS impersonation target",
            "type": "string",
            "description": "curl_cffi browser TLS-impersonation target. Defaults to \"chrome\" internally, though no anti-bot friction was found anywhere on this site while building this actor."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy configuration. Leave off unless you start seeing blocks from your own IP reputation — no anti-bot friction was found while building this actor.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}