{
  "title": "Google Workspace Marketplace App Review Extractor Input",
  "description": "Extract public reviews for one or more Google Workspace Marketplace apps by App ID or app URL. No login, API key or proxy needed.",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "appIds": {
      "title": "App IDs or app URLs",
      "type": "array",
      "editor": "stringList",
      "description": "One or more Google Workspace Marketplace apps. Paste numeric App IDs (e.g. 539341275670) or full app URLs. Duplicate IDs are removed automatically.",
      "sectionCaption": "Apps",
      "sectionDescription": "Each app is scraped separately and its reviews are combined in one dataset.",
      "prefill": [
        "539341275670"
      ],
      "items": {
        "type": "string"
      }
    },
    "sortBy": {
      "title": "Sort reviews by",
      "type": "string",
      "description": "Most relevant and Most helpful use Google's helpful ranking. Newest uses the date ranking. Highest rated and Lowest rated sort the fetched reviews in the actor; increase Max reviews per app to widen the window.",
      "editor": "select",
      "enum": [
        "MostRelevant",
        "MostHelpful",
        "Newest",
        "HighestRated",
        "LowestRated"
      ],
      "enumTitles": [
        "Most relevant (Google default)",
        "Most helpful first",
        "Newest first",
        "Highest rated first",
        "Lowest rated first"
      ],
      "default": "MostRelevant",
      "prefill": "MostRelevant",
      "sectionCaption": "Review filters",
      "sectionDescription": "All filters are applied to the reviews that the Marketplace serves for the selected language."
    },
    "reviewLanguage": {
      "title": "Review language",
      "type": "string",
      "description": "The Marketplace serves reviews one language at a time. Pick a language for a complete slice, or All languages for the mixed stream the site shows under 'All languages'.",
      "editor": "select",
      "enum": [
        "en",
        "all",
        "de",
        "es",
        "fr",
        "pt-BR",
        "it",
        "ru",
        "ja",
        "ko",
        "zh-CN",
        "zh-TW",
        "id",
        "vi",
        "nl",
        "pl",
        "tr",
        "ar",
        "hi",
        "th",
        "he",
        "uk",
        "sv",
        "da",
        "fi",
        "no",
        "cs",
        "hu",
        "fil"
      ],
      "enumTitles": [
        "English",
        "All languages (mixed stream)",
        "German",
        "Spanish",
        "French",
        "Portuguese (Brazil)",
        "Italian",
        "Russian",
        "Japanese",
        "Korean",
        "Chinese (Simplified)",
        "Chinese (Traditional)",
        "Indonesian",
        "Vietnamese",
        "Dutch",
        "Polish",
        "Turkish",
        "Arabic",
        "Hindi",
        "Thai",
        "Hebrew",
        "Ukrainian",
        "Swedish",
        "Danish",
        "Finnish",
        "Norwegian",
        "Czech",
        "Hungarian",
        "Filipino"
      ],
      "default": "en",
      "prefill": "en"
    },
    "minRating": {
      "title": "Minimum star rating",
      "type": "integer",
      "description": "Only include reviews with this rating or higher (1-5). Leave empty for all ratings.",
      "minimum": 1,
      "maximum": 5
    },
    "maxRating": {
      "title": "Maximum star rating",
      "type": "integer",
      "description": "Only include reviews with this rating or lower (1-5). Use 2 to collect complaints only. Leave empty for all ratings.",
      "minimum": 1,
      "maximum": 5
    },
    "sinceDate": {
      "title": "Reviews from",
      "type": "string",
      "editor": "textfield",
      "description": "Only reviews posted on or after this date. Use an ISO date (2026-01-01), an ISO datetime, or a relative period such as '30 days', '2 weeks' or '6 months'."
    },
    "untilDate": {
      "title": "Reviews until",
      "type": "string",
      "editor": "textfield",
      "description": "Only reviews posted on or before this date. Use an ISO date (2026-12-31) or an ISO datetime. A bare date includes the whole day."
    },
    "reviewKeyword": {
      "title": "Review text contains",
      "type": "string",
      "editor": "textfield",
      "description": "Case-insensitive text that must appear in the review. Useful for complaints, feature names or product terms. Leave empty for all reviews."
    },
    "maxItems": {
      "title": "Max reviews (total)",
      "type": "integer",
      "description": "Maximum number of reviews to save across all apps.",
      "minimum": 1,
      "maximum": 5000,
      "default": 100,
      "prefill": 3,
      "sectionCaption": "Output limits",
      "sectionDescription": "Caps keep runs fast and predictable. Unused slots are offered to the next app."
    },
    "maxReviewsPerApp": {
      "title": "Max reviews per app",
      "type": "integer",
      "description": "Maximum reviews to save for any single app. Raise this to scan deeper for sparse filters or rating sorts.",
      "minimum": 1,
      "maximum": 2000,
      "default": 2000,
      "prefill": 3
    }
  },
  "required": []
}
