{
 "openapi": "3.1.0",
 "info": {
  "title": "SaaS Price Watch API",
  "version": "1.0.0",
  "description": "Read-only public SaaS plan prices and weekly price changes. Every price includes a quote from the vendor pricing page and the date checked. No auth. Rate limited. Data license: CC BY 4.0 (credit SaaS Price Watch with a link to https://saaspricealerts.com/).",
  "contact": {
   "name": "SaaS Price Watch",
   "url": "https://saaspricealerts.com/contact/",
   "email": "nichols-ventures@mail.grokbot.com"
  },
  "license": {
   "name": "CC BY 4.0",
   "url": "https://creativecommons.org/licenses/by/4.0/"
  }
 },
 "servers": [
  {
   "url": "https://saaspricealerts.com",
   "description": "Production"
  }
 ],
 "security": [],
 "externalDocs": {
  "description": "Static JSON files and notes",
  "url": "https://saaspricealerts.com/api/"
 },
 "paths": {
  "/api/v1/vendors": {
   "get": {
    "operationId": "searchSaasVendors",
    "security": [],
    "summary": "Search SaaS vendors with tracked pricing",
    "description": "Search tracked SaaS vendors by name or category. Returns the lowest paid plan monthly figure and the source page.",
    "parameters": [
     {
      "name": "query",
      "in": "query",
      "required": false,
      "description": "Vendor name or keyword",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "Short alias for query",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "category",
      "in": "query",
      "required": false,
      "description": "Category slug: crm, email, dev, ai, payments, scheduling, and more",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "1 to 50 (default 15)",
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Matching vendors",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/VendorList"
        },
        "example": {
         "count": 1,
         "results": [
          {
           "vendor": "shopify.com",
           "name": "Shopify",
           "category": "website",
           "lowest_monthly_figure_quoted": 29.0,
           "lowest_paid_plan_price": 29.0,
           "pricing_url": "https://www.shopify.com/pricing",
           "page": "https://saaspricealerts.com/vendors/shopify-com/",
           "checked": "2026-10-18"
          }
         ],
         "categories": [
          "ai",
          "analytics",
          "automation",
          "comms",
          "crm",
          "design",
          "dev",
          "docs",
          "ecommerce",
          "email",
          "fieldservice",
          "finance",
          "forms",
          "hr",
          "payments",
          "pm",
          "sales",
          "scheduling",
          "security",
          "seo",
          "social",
          "support",
          "video",
          "website"
         ],
         "source": "https://saaspricealerts.com",
         "updated": "2026-10-18",
         "license": "CC BY 4.0",
         "license_url": "https://creativecommons.org/licenses/by/4.0/"
        }
       }
      }
     },
     "404": {
      "description": "Not found",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     },
     "429": {
      "description": "Rate limited",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        },
        "description": "Seconds to wait"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/vendors/{vendor}": {
   "get": {
    "operationId": "getVendorPricing",
    "security": [],
    "summary": "Get public plan prices for one SaaS vendor",
    "description": "Full plan prices for one vendor, each with the quote from its pricing page and the check date.",
    "parameters": [
     {
      "name": "vendor",
      "in": "path",
      "required": true,
      "description": "Vendor domain or name, like hubspot.com or Notion",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Vendor pricing",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/VendorDetail"
        },
        "example": {
         "vendor": "shopify.com",
         "name": "Shopify",
         "category": "website",
         "lowest_monthly_figure_quoted": 29.0,
         "lowest_paid_plan_price": 29.0,
         "pricing_url": "https://www.shopify.com/pricing",
         "page": "https://saaspricealerts.com/vendors/shopify-com/",
         "checked": "2026-10-18",
         "page_title": "Shopify Pricing: Find the Right Plan for Your Business - Shopify",
         "prices": [
          {
           "amount": 1.0,
           "unit": "month",
           "kind": "trial",
           "quote_from_vendor_page": "Log in Start for free You've got plans. Us too. Try 3 days free, then $1/month for 3 months."
          },
          {
           "plan": "Basic",
           "amount": 29.0,
           "unit": "mo",
           "kind": "plan",
           "quote_from_vendor_page": "ee, then $1/month for 3 months. Pay yearly Compare all features Basic $29 /mo For solo entre"
          },
          {
           "plan": "Grow",
           "amount": 79.0,
           "unit": "mo",
           "kind": "plan",
           "quote_from_vendor_page": "-in AI assistant Millions of tokens Earn up to $5,000 in credits Grow $79 /mo For small team"
          },
          {
           "plan": "Advanced",
           "amount": 299.0,
           "unit": "mo",
           "kind": "plan",
           "quote_from_vendor_page": "accounts Up to 87% off shipping Earn up to $7,500 in credits Advanced $299 /mo For global rea"
          },
          {
           "amount": 89.0,
           "unit": "mo",
           "kind": "addon",
           "quote_from_vendor_page": "with multichannel integration. But wait, there\u2019s more POS Pro Add on +$89 /mo For physical s"
          },
          {
           "amount": 0.0,
           "unit": "mo",
           "kind": "free",
           "quote_from_vendor_page": "tore inventory management In-store pickup & flexible delivery Agentic $0 /mo For selling in"
          }
         ],
         "license": "CC BY 4.0",
         "license_url": "https://creativecommons.org/licenses/by/4.0/",
         "note": "Numbers are quoted from the vendor pricing page on the checked date. Confirm on the vendor site."
        }
       }
      }
     },
     "404": {
      "description": "Not found",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     },
     "429": {
      "description": "Rate limited",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        },
        "description": "Seconds to wait"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/price-changes": {
   "get": {
    "operationId": "recentPriceChanges",
    "security": [],
    "summary": "Recent SaaS price changes between weekly checks",
    "description": "Price changes found between weekly checks. Alias path: /api/v1/changes.",
    "parameters": [
     {
      "name": "category",
      "in": "query",
      "required": false,
      "description": "Optional category slug",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "since",
      "in": "query",
      "required": false,
      "description": "ISO date, like 2026-10-01. Keeps changes with to_date on or after this day.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "1 to 50 (default 20)",
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Price changes",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ChangeList"
        },
        "example": {
         "count": 1,
         "changes": [
          {
           "vendor": "shopify.com/pricing",
           "source_url": "https://www.shopify.com/pricing",
           "from_date": "2026-10-17",
           "to_date": "2026-10-18",
           "detected": "2026-10-18",
           "items": [
            {
             "plan": "Grow",
             "unit": "mo",
             "old_price": 79.0,
             "new_price": 89.0,
             "old_quote": "-in AI assistant Millions of tokens Earn up to $5,000 in credits Grow $79 /mo For small team",
             "new_quote": "-in AI assistant Millions of tokens Earn up to $5,000 in credits Grow $89 /mo For small team"
            },
            {
             "plan": "Advanced",
             "unit": "mo",
             "old_price": 299.0,
             "new_price": 359.0,
             "old_quote": "accounts Up to 87% off shipping Earn up to $7,500 in credits Advanced $299 /mo For global rea",
             "new_quote": "accounts Up to 87% off shipping Earn up to $7,500 in credits Advanced $359 /mo For global rea"
            }
           ],
           "method": "html",
           "status": "price_test",
           "note": "Two versions of the pricing page are being served. Of 20 reads on 2026-10-18 between 02:28 and 02:33 CT, 5 showed the annual-billing Grow and Advanced prices at $89 and $359 and 15 showed $79 and $299. Month-to-month prices ($105 and $399) and Basic ($29 a month on annual billing, $39 month to month) were the same in both versions.",
           "external": [
            {
             "source": "PricingSaaS Pulse",
             "url": "https://pricingsaas.com/news/article/shopify-raises-annual-grow-to-89-mo-advanced-to-359-mo",
             "saved": "data/live/pricingsaas_shopify_2026-10-18_0.html",
             "says": "Saw $89 and $359 on Oct 15, 2026, saw $79 and $299 again on Oct 16, and calls it a probable A/B test."
            }
           ],
           "page": "https://saaspricealerts.com/vendors/shopify-com/",
           "price_page": "https://saaspricealerts.com/price-increases/shopify-2026/"
          }
         ],
         "history_starts": "2026-10-17",
         "source": "https://saaspricealerts.com",
         "license": "CC BY 4.0",
         "license_url": "https://creativecommons.org/licenses/by/4.0/"
        }
       }
      }
     },
     "404": {
      "description": "Not found",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     },
     "429": {
      "description": "Rate limited",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        },
        "description": "Seconds to wait"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/changes": {
   "get": {
    "operationId": "recentPriceChangesAlias",
    "security": [],
    "summary": "Alias of /api/v1/price-changes",
    "parameters": [
     {
      "name": "category",
      "in": "query",
      "required": false,
      "description": "Optional category slug",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "since",
      "in": "query",
      "required": false,
      "description": "ISO date",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "1 to 50",
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Price changes",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ChangeList"
        },
        "example": {
         "count": 1,
         "changes": [
          {
           "vendor": "shopify.com/pricing",
           "source_url": "https://www.shopify.com/pricing",
           "from_date": "2026-10-17",
           "to_date": "2026-10-18",
           "detected": "2026-10-18",
           "items": [
            {
             "plan": "Grow",
             "unit": "mo",
             "old_price": 79.0,
             "new_price": 89.0,
             "old_quote": "-in AI assistant Millions of tokens Earn up to $5,000 in credits Grow $79 /mo For small team",
             "new_quote": "-in AI assistant Millions of tokens Earn up to $5,000 in credits Grow $89 /mo For small team"
            },
            {
             "plan": "Advanced",
             "unit": "mo",
             "old_price": 299.0,
             "new_price": 359.0,
             "old_quote": "accounts Up to 87% off shipping Earn up to $7,500 in credits Advanced $299 /mo For global rea",
             "new_quote": "accounts Up to 87% off shipping Earn up to $7,500 in credits Advanced $359 /mo For global rea"
            }
           ],
           "method": "html",
           "status": "price_test",
           "note": "Two versions of the pricing page are being served. Of 20 reads on 2026-10-18 between 02:28 and 02:33 CT, 5 showed the annual-billing Grow and Advanced prices at $89 and $359 and 15 showed $79 and $299. Month-to-month prices ($105 and $399) and Basic ($29 a month on annual billing, $39 month to month) were the same in both versions.",
           "external": [
            {
             "source": "PricingSaaS Pulse",
             "url": "https://pricingsaas.com/news/article/shopify-raises-annual-grow-to-89-mo-advanced-to-359-mo",
             "saved": "data/live/pricingsaas_shopify_2026-10-18_0.html",
             "says": "Saw $89 and $359 on Oct 15, 2026, saw $79 and $299 again on Oct 16, and calls it a probable A/B test."
            }
           ],
           "page": "https://saaspricealerts.com/vendors/shopify-com/",
           "price_page": "https://saaspricealerts.com/price-increases/shopify-2026/"
          }
         ],
         "history_starts": "2026-10-17",
         "source": "https://saaspricealerts.com",
         "license": "CC BY 4.0",
         "license_url": "https://creativecommons.org/licenses/by/4.0/"
        }
       }
      }
     },
     "404": {
      "description": "Not found",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     },
     "429": {
      "description": "Rate limited",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        },
        "description": "Seconds to wait"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "error": {
           "type": "string",
           "description": "Message"
          }
         }
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "VendorSummary": {
    "type": "object",
    "required": [
     "vendor",
     "name",
     "category"
    ],
    "properties": {
     "vendor": {
      "type": "string",
      "description": "Vendor domain, like shopify.com"
     },
     "name": {
      "type": "string",
      "description": "Display name"
     },
     "category": {
      "type": "string",
      "description": "Category slug, like crm or website"
     },
     "lowest_monthly_figure_quoted": {
      "type": [
       "number",
       "null"
      ],
      "description": "Lowest paid plan monthly figure, or null"
     },
     "lowest_paid_plan_price": {
      "type": [
       "number",
       "null"
      ],
      "description": "Same as lowest_monthly_figure_quoted"
     },
     "pricing_url": {
      "type": "string",
      "description": "Vendor pricing page URL"
     },
     "page": {
      "type": "string",
      "description": "SaaS Price Watch vendor page"
     },
     "checked": {
      "type": "string",
      "description": "ISO date of the last check"
     }
    }
   },
   "PriceLine": {
    "type": "object",
    "properties": {
     "plan": {
      "type": "string",
      "description": "Plan label read from the page, when found"
     },
     "amount": {
      "type": "number",
      "description": "Dollar amount"
     },
     "unit": {
      "type": "string",
      "description": "Billing unit, like mo or year"
     },
     "kind": {
      "type": "string",
      "description": "plan, trial, promo, addon, or free"
     },
     "quote_from_vendor_page": {
      "type": "string",
      "description": "Short quote from the pricing page"
     }
    }
   },
   "VendorDetail": {
    "type": "object",
    "required": [
     "vendor",
     "name",
     "category"
    ],
    "properties": {
     "vendor": {
      "type": "string",
      "description": "Vendor domain"
     },
     "name": {
      "type": "string",
      "description": "Display name"
     },
     "category": {
      "type": "string",
      "description": "Category slug"
     },
     "lowest_monthly_figure_quoted": {
      "type": [
       "number",
       "null"
      ],
      "description": "Lowest paid plan monthly figure, or null"
     },
     "lowest_paid_plan_price": {
      "type": [
       "number",
       "null"
      ],
      "description": "Same as lowest_monthly_figure_quoted"
     },
     "pricing_url": {
      "type": "string",
      "description": "Vendor pricing page URL"
     },
     "page": {
      "type": "string",
      "description": "SaaS Price Watch vendor page"
     },
     "checked": {
      "type": "string",
      "description": "ISO date of the last check"
     },
     "page_title": {
      "type": "string",
      "description": "Title of the vendor pricing page"
     },
     "prices": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/PriceLine"
      }
     },
     "license": {
      "type": "string",
      "description": "Data license short name"
     },
     "license_url": {
      "type": "string",
      "description": "License URL"
     },
     "note": {
      "type": "string",
      "description": "Caveat for clients"
     }
    }
   },
   "ChangeItem": {
    "type": "object",
    "properties": {
     "plan": {
      "type": "string",
      "description": "Plan label"
     },
     "unit": {
      "type": "string",
      "description": "Billing unit"
     },
     "old_price": {
      "type": "number",
      "description": "Prior amount"
     },
     "new_price": {
      "type": "number",
      "description": "New amount"
     },
     "old_quote": {
      "type": "string",
      "description": "Quote from the prior check"
     },
     "new_quote": {
      "type": "string",
      "description": "Quote from the later check"
     }
    }
   },
   "Change": {
    "type": "object",
    "additionalProperties": true,
    "properties": {
     "vendor": {
      "type": "string",
      "description": "Vendor key used in the tracker"
     },
     "source_url": {
      "type": "string",
      "description": "Pricing page URL"
     },
     "from_date": {
      "type": "string",
      "description": "Prior check date"
     },
     "to_date": {
      "type": "string",
      "description": "Later check date"
     },
     "detected": {
      "type": "string",
      "description": "Date the change was logged"
     },
     "items": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/ChangeItem"
      }
     },
     "method": {
      "type": "string",
      "description": "How the page was read, like html or headless"
     },
     "status": {
      "type": "string",
      "description": "confirmed, price_test, unconfirmed, or retracted"
     },
     "note": {
      "type": "string",
      "description": "Human-readable note when status is not a plain confirm"
     },
     "page": {
      "type": "string",
      "description": "SaaS Price Watch vendor page"
     },
     "price_page": {
      "type": "string",
      "description": "Price-increase page when one exists"
     },
     "category": {
      "type": "string",
      "description": "Category when known"
     }
    }
   },
   "VendorList": {
    "type": "object",
    "properties": {
     "count": {
      "type": "integer",
      "description": "Total matches before limit"
     },
     "results": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/VendorSummary"
      }
     },
     "categories": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "source": {
      "type": "string",
      "description": "Canonical site URL"
     },
     "updated": {
      "type": "string",
      "description": "ISO date of the vendor dump"
     },
     "license": {
      "type": "string",
      "description": "Data license short name"
     },
     "license_url": {
      "type": "string",
      "description": "License URL"
     }
    }
   },
   "ChangeList": {
    "type": "object",
    "properties": {
     "count": {
      "type": "integer",
      "description": "Total matches before limit"
     },
     "changes": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Change"
      }
     },
     "history_starts": {
      "type": "string",
      "description": "First snap date in the tracker"
     },
     "source": {
      "type": "string",
      "description": "Canonical site URL"
     },
     "license": {
      "type": "string",
      "description": "Data license short name"
     },
     "license_url": {
      "type": "string",
      "description": "License URL"
     },
     "note": {
      "type": "string",
      "description": "Present when the list is empty"
     }
    }
   }
  }
 }
}