Google Image Search Results & Metadata Scraper
Run a Google Images search and get back full-resolution image URLs with dimensions, thumbnails, source page titles, and the web page each image came from.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
queries | array | optional | One or more image search queries. Each query is searched independently. Google operators such as site:, quoted phrases and -exclusions are passed through. The legacy single `query` key is still accepted by the actor code. |
maxResults | integer | optional | Maximum number of image rows to return for each query. Google Images usually runs out around 300-400 results for a query; this is a ceiling, not a guarantee. |
minWidth | integer | optional | Drop images narrower than this many pixels. Rows without published dimensions are dropped when this is set. 0 disables the filter. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
queries | array | optional | One or more image search queries. Each query is searched independently. Google operators such as site:, quoted phrases and -exclusions are passed through. The legacy single `query` key is still accepted by the actor code. |
maxResults | integer | optional | Maximum number of image rows to return for each query. Google Images usually runs out around 300-400 results for a query; this is a ceiling, not a guarantee. |
minWidth | integer | optional | Drop images narrower than this many pixels. Rows without published dimensions are dropped when this is set. 0 disables the filter. |
minHeight | integer | optional | Drop images shorter than this many pixels. Rows without published dimensions are dropped when this is set. 0 disables the filter. |
country | string | optional | Two-letter country used for Google's gl parameter (and Bing's cc parameter). Local sites rank higher in local results. |
language | string | optional | Interface and result language used for Google's hl parameter (and Bing's setlang parameter). |
safeSearch | string | optional | Google SafeSearch level. 'active' filters explicit images; 'off' does not. |
imageSize | string | optional | Google Images size filter. The MP values are minimum megapixels. Bing fallback applies the nearest size category and enforces the exact MP floor locally when dimensions are known. |
imageColor | string | optional | Google Images color filter. 'black_and_white' is grayscale; 'transparent' looks for a transparent background. |
imageType | string | optional | Google Images type filter: photographs, faces, clip art, line drawings or animated images. |
fileType | string | optional | Only images in this format. Google applies this server-side; Bing fallback applies it to the image URL extension locally. |
timeRange | string | optional | Only images Google found within this period. Bing fallback maps 'hour' to its 24-hour window. |
usageRights | string | optional | Google's usage-rights labels. These are Google's labels, not a legal guarantee; check the licence on the source page before reuse. |
googleOnly | boolean | optional | When true, a failed or empty Google search fails that query with a clear status instead of using another engine. The default is false so legacy saved tasks keep working; set this true for a strict Google-only contract. |
enableFallback | boolean | optional | When googleOnly is false, allow labelled Bing Images and then DuckDuckGo Images. Every fallback row carries engine, isFallback=true and fallbackReason. |
Download the published input schema
View complete JSON
{
"properties": {
"country": {
"default": "US",
"description": "Two-letter country used for Google's gl parameter (and Bing's cc parameter). Local sites rank higher in local results.",
"editor": "select",
"enum": [
"US",
"GB",
"CA",
"AU",
"DE",
"FR",
"ES",
"IT",
"NL",
"BR",
"MX",
"IN",
"JP",
"KR",
"CN",
"SG",
"AE",
"ZA",
"PL",
"TR",
"ID",
"PK",
"PH",
"MY",
"TH",
"VN",
"SE",
"NO",
"DK",
"FI",
"IE",
"NZ",
"CH",
"AT",
"BE",
"PT",
"GR",
"CZ",
"RO",
"HU",
"UA",
"RU",
"SA",
"EG",
"NG",
"KE",
"AR",
"CL",
"CO",
"PE",
"IL",
"AF",
"AL",
"DZ",
"AS",
"AD",
"AO",
"AI",
"AQ",
"AG",
"AM",
"AW",
"AC",
"AZ",
"BS",
"BH",
"BD",
"BB",
"BY",
"BZ",
"BJ",
"BM",
"BT",
"BO",
"BA",
"BW",
"BV",
"IO",
"VG",
"BN",
"BG",
"BF",
"BI",
"KH",
"CM",
"IC",
"CV",
"BQ",
"KY",
"CF",
"EA",
"TD",
"CX",
"CP",
"CC",
"KM",
"CG",
"CD",
"CK",
"CR",
"HR",
"CU",
"CW",
"CY",
"CI",
"DG",
"DJ",
"DM",
"DO",
"EC",
"SV",
"GQ",
"ER",
"EE",
"SZ",
"ET",
"EU",
"EZ",
"FK",
"FO",
"FJ",
"GF",
"PF",
"TF",
"GA",
"GM",
"GE",
"GH",
"GI",
"GL",
"GD",
"GP",
"GU",
"GT",
"GG",
"GN",
"GW",
"GY",
"HT",
"HM",
"HN",
"HK",
"IS",
"IR",
"IQ",
"IM",
"JM",
"JE",
"JO",
"KZ",
"KI",
"XK",
"KW",
"KG",
"LA",
"LV",
"LB",
"LS",
"LR",
"LY",
"LI",
"LT",
"LU",
"MO",
"MG",
"MW",
"MV",
"ML",
"MT",
"MH",
"MQ",
"MR",
"MU",
"YT",
"FM",
"MD",
"MC",
"MN",
"ME",
"MS",
"MA",
"MZ",
"MM",
"NA",
"NR",
"NP",
"NC",
"NI",
"NE",
"NU",
"NF",
"KP",
"MK",
"MP",
"OM",
"QO",
"PW",
"PS",
"PA",
"PG",
"PY",
"PN",
"XA",
"XB",
"PR",
"QA",
"RW",
"RE",
"WS",
"SM",
"CQ",
"SN",
"RS",
"SC",
"SL",
"SX",
"SK",
"SI",
"SB",
"SO",
"GS",
"SS",
"LK",
"BL",
"SH",
"KN",
"LC",
"MF",
"PM",
"VC",
"SD",
"SR",
"SJ",
"SY",
"ST",
"TW",
"TJ",
"TZ",
"TL",
"TG",
"TK",
"TO",
"TT",
"TA",
"TN",
"TM",
"TC",
"TV",
"UM",
"VI",
"UG",
"UN",
"ZZ",
"UY",
"UZ",
"VU",
"VA",
"VE",
"WF",
"EH",
"YE",
"ZM",
"ZW",
"AX"
],
"enumTitles": [
"United States",
"United Kingdom",
"Canada",
"Australia",
"Germany",
"France",
"Spain",
"Italy",
"Netherlands",
"Brazil",
"Mexico",
"India",
"Japan",
"South Korea",
"China",
"Singapore",
"United Arab Emirates",
"South Africa",
"Poland",
"Türkiye",
"Indonesia",
"Pakistan",
"Philippines",
"Malaysia",
"Thailand",
"Vietnam",
"Sweden",
"Norway",
"Denmark",
"Finland",
"Ireland",
"New Zealand",
"Switzerland",
"Austria",
"Belgium",
"Portugal",
"Greece",
"Czechia",
"Romania",
"Hungary",
"Ukraine",
"Russia",
"Saudi Arabia",
"Egypt",
"Nigeria",
"Kenya",
"Argentina",
"Chile",
"Colombia",
"Peru",
"Israel",
"Afghanistan",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica",
"Antigua & Barbuda",
"Armenia",
"Aruba",
"Ascension Island",
"Azerbaijan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia",
"Bosnia & Herzegovina",
"Botswana",
"Bouvet Island",
"British Indian Ocean Territory",
"British Virgin Islands",
"Brunei",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canary Islands",
"Cape Verde",
"Caribbean Netherlands",
"Cayman Islands",
"Central African Republic",
"Ceuta & Melilla",
"Chad",
"Christmas Island",
"Clipperton Island",
"Cocos (Keeling) Islands",
"Comoros",
"Congo - Brazzaville",
"Congo - Kinshasa",
"Cook Islands",
"Costa Rica",
"Croatia",
"Cuba",
"Curaçao",
"Cyprus",
"Côte d’Ivoire",
"Diego Garcia",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Eswatini",
"Ethiopia",
"European Union",
"Eurozone",
"Falkland Islands",
"Faroe Islands",
"Fiji",
"French Guiana",
"French Polynesia",
"French Southern Territories",
"Gabon",
"Gambia",
"Georgia",
"Ghana",
"Gibraltar",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard & McDonald Islands",
"Honduras",
"Hong Kong SAR China",
"Iceland",
"Iran",
"Iraq",
"Isle of Man",
"Jamaica",
"Jersey",
"Jordan",
"Kazakhstan",
"Kiribati",
"Kosovo",
"Kuwait",
"Kyrgyzstan",
"Laos",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macao SAR China",
"Madagascar",
"Malawi",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar (Burma)",
"Namibia",
"Nauru",
"Nepal",
"New Caledonia",
"Nicaragua",
"Niger",
"Niue",
"Norfolk Island",
"North Korea",
"North Macedonia",
"Northern Mariana Islands",
"Oman",
"Outlying Oceania",
"Palau",
"Palestinian Territories",
"Panama",
"Papua New Guinea",
"Paraguay",
"Pitcairn Islands",
"Pseudo-Accents",
"Pseudo-Bidi",
"Puerto Rico",
"Qatar",
"Rwanda",
"Réunion",
"Samoa",
"San Marino",
"Sark",
"Senegal",
"Serbia",
"Seychelles",
"Sierra Leone",
"Sint Maarten",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Georgia & South Sandwich Islands",
"South Sudan",
"Sri Lanka",
"St. Barthélemy",
"St. Helena",
"St. Kitts & Nevis",
"St. Lucia",
"St. Martin",
"St. Pierre & Miquelon",
"St. Vincent & Grenadines",
"Sudan",
"Suriname",
"Svalbard & Jan Mayen",
"Syria",
"São Tomé & Príncipe",
"Taiwan",
"Tajikistan",
"Tanzania",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad & Tobago",
"Tristan da Cunha",
"Tunisia",
"Turkmenistan",
"Turks & Caicos Islands",
"Tuvalu",
"U.S. Outlying Islands",
"U.S. Virgin Islands",
"Uganda",
"United Nations",
"Unknown Region",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Vatican City",
"Venezuela",
"Wallis & Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
"Åland Islands"
],
"prefill": "US",
"title": "Country",
"type": "string"
},
"enableFallback": {
"default": true,
"description": "When googleOnly is false, allow labelled Bing Images and then DuckDuckGo Images. Every fallback row carries engine, isFallback=true and fallbackReason.",
"prefill": true,
"title": "Enable labelled fallback",
"type": "boolean"
},
"fileType": {
"default": "",
"description": "Only images in this format. Google applies this server-side; Bing fallback applies it to the image URL extension locally.",
"editor": "select",
"enum": [
"",
"jpg",
"png",
"gif",
"bmp",
"svg",
"webp",
"ico"
],
"enumTitles": [
"Any format",
"JPEG",
"PNG",
"GIF",
"BMP",
"SVG",
"WebP",
"ICO"
],
"prefill": "",
"title": "File type",
"type": "string"
},
"googleOnly": {
"default": false,
"description": "When true, a failed or empty Google search fails that query with a clear status instead of using another engine. The default is false so legacy saved tasks keep working; set this true for a strict Google-only contract.",
"prefill": false,
"title": "Google only",
"type": "boolean"
},
"imageColor": {
"default": "",
"description": "Google Images color filter. 'black_and_white' is grayscale; 'transparent' looks for a transparent background.",
"editor": "select",
"enum": [
"",
"color",
"black_and_white",
"transparent",
"red",
"orange",
"yellow",
"green",
"teal",
"blue",
"purple",
"pink",
"white",
"gray",
"black",
"brown"
],
"enumTitles": [
"Any color",
"Full color",
"Black and white",
"Transparent",
"Red",
"Orange",
"Yellow",
"Green",
"Teal",
"Blue",
"Purple",
"Pink",
"White",
"Gray",
"Black",
"Brown"
],
"prefill": "",
"title": "Image color",
"type": "string"
},
"imageSize": {
"default": "",
"description": "Google Images size filter. The MP values are minimum megapixels. Bing fallback applies the nearest size category and enforces the exact MP floor locally when dimensions are known.",
"editor": "select",
"enum": [
"",
"large",
"medium",
"icon",
"2mp",
"4mp",
"8mp",
"12mp",
"20mp",
"40mp",
"70mp"
],
"enumTitles": [
"Any size",
"Large",
"Medium",
"Icon",
"2 MP or larger",
"4 MP or larger",
"8 MP or larger",
"12 MP or larger",
"20 MP or larger",
"40 MP or larger",
"70 MP or larger"
],
"prefill": "",
"title": "Image size",
"type": "string"
},
"imageType": {
"default": "",
"description": "Google Images type filter: photographs, faces, clip art, line drawings or animated images.",
"editor": "select",
"enum": [
"",
"photo",
"face",
"clipart",
"lineart",
"animated"
],
"enumTitles": [
"Any type",
"Photo",
"Face",
"Clip art",
"Line drawing",
"Animated"
],
"prefill": "",
"title": "Image type",
"type": "string"
},
"language": {
"default": "en",
"description": "Interface and result language used for Google's hl parameter (and Bing's setlang parameter).",
"editor": "select",
"enum": [
"en",
"es",
"de",
"fr",
"pt",
"pt-BR",
"it",
"nl",
"pl",
"ru",
"uk",
"tr",
"ar",
"hi",
"ur",
"bn",
"id",
"ms",
"th",
"vi",
"ja",
"ko",
"zh-CN",
"zh-TW",
"ab",
"aa",
"af",
"ak",
"sq",
"am",
"an",
"hy",
"as",
"av",
"ae",
"ay",
"az",
"bm",
"ba",
"eu",
"be",
"bi",
"bs",
"br",
"bg",
"my",
"ca",
"ch",
"ce",
"zh",
"cu",
"cv",
"kw",
"co",
"cr",
"hr",
"cs",
"da",
"dv",
"dz",
"eo",
"et",
"ee",
"fo",
"fj",
"fi",
"ff",
"gl",
"lg",
"ka",
"el",
"gn",
"gu",
"ht",
"ha",
"he",
"hz",
"ho",
"hu",
"is",
"io",
"ig",
"ia",
"ie",
"iu",
"ik",
"ga",
"jv",
"kl",
"kn",
"kr",
"ks",
"kk",
"km",
"ki",
"rw",
"kv",
"kg",
"kj",
"ku",
"ky",
"lo",
"la",
"lv",
"li",
"ln",
"lt",
"lu",
"lb",
"mk",
"mg",
"ml",
"mt",
"gv",
"mr",
"mh",
"mn",
"mi",
"na",
"nv",
"ng",
"ne",
"nd",
"se",
"no",
"nb",
"nn",
"ny",
"oc",
"or",
"oj",
"om",
"os",
"pi",
"ps",
"fa",
"pa",
"qu",
"ro",
"rm",
"rn",
"sm",
"sg",
"sa",
"sc",
"gd",
"sr",
"sh",
"sn",
"ii",
"sd",
"si",
"sk",
"sl",
"so",
"nr",
"st",
"su",
"sw",
"ss",
"sv",
"tl",
"ty",
"tg",
"ta",
"tt",
"te",
"bo",
"ti",
"to",
"ts",
"tn",
"tk",
"tw",
"ug",
"uz",
"ve",
"vo",
"wa",
"cy",
"fy",
"wo",
"xh",
"yi",
"yo",
"za",
"zu"
],
"enumTitles": [
"English",
"Spanish",
"German",
"French",
"Portuguese",
"Portuguese (Brazil)",
"Italian",
"Dutch",
"Polish",
"Russian",
"Ukrainian",
"Turkish",
"Arabic",
"Hindi",
"Urdu",
"Bangla",
"Indonesian",
"Malay",
"Thai",
"Vietnamese",
"Japanese",
"Korean",
"Chinese (Simplified)",
"Chinese (Traditional)",
"Abkhazian",
"Afar",
"Afrikaans",
"Akan",
"Albanian",
"Amharic",
"Aragonese",
"Armenian",
"Assamese",
"Avaric",
"Avestan",
"Aymara",
"Azerbaijani",
"Bambara",
"Bashkir",
"Basque",
"Belarusian",
"Bislama",
"Bosnian",
"Breton",
"Bulgarian",
"Burmese",
"Catalan",
"Chamorro",
"Chechen",
"Chinese",
"Church Slavic",
"Chuvash",
"Cornish",
"Corsican",
"Cree",
"Croatian",
"Czech",
"Danish",
"Divehi",
"Dzongkha",
"Esperanto",
"Estonian",
"Ewe",
"Faroese",
"Fijian",
"Finnish",
"Fula",
"Galician",
"Ganda",
"Georgian",
"Greek",
"Guarani",
"Gujarati",
"Haitian Creole",
"Hausa",
"Hebrew",
"Herero",
"Hiri Motu",
"Hungarian",
"Icelandic",
"Ido",
"Igbo",
"Interlingua",
"Interlingue",
"Inuktitut",
"Inupiaq",
"Irish",
"Javanese",
"Kalaallisut",
"Kannada",
"Kanuri",
"Kashmiri",
"Kazakh",
"Khmer",
"Kikuyu",
"Kinyarwanda",
"Komi",
"Kongo",
"Kuanyama",
"Kurdish",
"Kyrgyz",
"Lao",
"Latin",
"Latvian",
"Limburgish",
"Lingala",
"Lithuanian",
"Luba-Katanga",
"Luxembourgish",
"Macedonian",
"Malagasy",
"Malayalam",
"Maltese",
"Manx",
"Marathi",
"Marshallese",
"Mongolian",
"Māori",
"Nauru",
"Navajo",
"Ndonga",
"Nepali",
"North Ndebele",
"Northern Sami",
"Norwegian",
"Norwegian Bokmål",
"Norwegian Nynorsk",
"Nyanja",
"Occitan",
"Odia",
"Ojibwa",
"Oromo",
"Ossetic",
"Pali",
"Pashto",
"Persian",
"Punjabi",
"Quechua",
"Romanian",
"Romansh",
"Rundi",
"Samoan",
"Sango",
"Sanskrit",
"Sardinian",
"Scottish Gaelic",
"Serbian",
"Serbo-Croatian",
"Shona",
"Sichuan Yi",
"Sindhi",
"Sinhala",
"Slovak",
"Slovenian",
"Somali",
"South Ndebele",
"Southern Sotho",
"Sundanese",
"Swahili",
"Swati",
"Swedish",
"Tagalog",
"Tahitian",
"Tajik",
"Tamil",
"Tatar",
"Telugu",
"Tibetan",
"Tigrinya",
"Tongan",
"Tsonga",
"Tswana",
"Turkmen",
"Twi",
"Uyghur",
"Uzbek",
"Venda",
"Volapük",
"Walloon",
"Welsh",
"Western Frisian",
"Wolof",
"Xhosa",
"Yiddish",
"Yoruba",
"Zhuang",
"Zulu"
],
"prefill": "en",
"title": "Language",
"type": "string"
},
"maxResults": {
"default": 100,
"description": "Maximum number of image rows to return for each query. Google Images usually runs out around 300-400 results for a query; this is a ceiling, not a guarantee.",
"maximum": 500,
"minimum": 1,
"prefill": 3,
"title": "Max results per query",
"type": "integer"
},
"minHeight": {
"default": 0,
"description": "Drop images shorter than this many pixels. Rows without published dimensions are dropped when this is set. 0 disables the filter.",
"maximum": 10000,
"minimum": 0,
"prefill": 0,
"title": "Minimum image height",
"type": "integer"
},
"minWidth": {
"default": 0,
"description": "Drop images narrower than this many pixels. Rows without published dimensions are dropped when this is set. 0 disables the filter.",
"maximum": 10000,
"minimum": 0,
"prefill": 0,
"title": "Minimum image width",
"type": "integer"
},
"queries": {
"description": "One or more image search queries. Each query is searched independently. Google operators such as site:, quoted phrases and -exclusions are passed through. The legacy single `query` key is still accepted by the actor code.",
"editor": "stringList",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"prefill": [
"Alfons Mucha"
],
"title": "Search queries",
"type": "array"
},
"safeSearch": {
"default": "active",
"description": "Google SafeSearch level. 'active' filters explicit images; 'off' does not.",
"editor": "select",
"enum": [
"active",
"off"
],
"enumTitles": [
"Filter explicit results (active)",
"Do not filter (off)"
],
"prefill": "active",
"title": "Safe search",
"type": "string"
},
"timeRange": {
"default": "",
"description": "Only images Google found within this period. Bing fallback maps 'hour' to its 24-hour window.",
"editor": "select",
"enum": [
"",
"hour",
"day",
"week",
"month",
"year"
],
"enumTitles": [
"Any time",
"Past hour",
"Past 24 hours",
"Past week",
"Past month",
"Past year"
],
"prefill": "",
"title": "Time range",
"type": "string"
},
"usageRights": {
"default": "",
"description": "Google's usage-rights labels. These are Google's labels, not a legal guarantee; check the licence on the source page before reuse.",
"editor": "select",
"enum": [
"",
"free_to_use_or_share",
"free_to_use_or_share_commercially",
"free_to_use_share_or_modify",
"free_to_use_share_or_modify_commercially"
],
"enumTitles": [
"Any usage rights",
"Free to use or share",
"Free to use or share, even commercially",
"Free to use, share or modify",
"Free to use, share or modify, even commercially"
],
"prefill": "",
"title": "Usage rights",
"type": "string"
}
},
"schemaVersion": 1,
"title": "Google Images Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
images | string | optional | Dataset containing all scraped image rows. Every row states its engine and whether imageUrl is an original, a thumbnail or a crawler-only URL. |
summary | string | optional | Per-run and per-query resultsRequested, resultsReturned, pagesFetched, stopReason and fallbackAttempts. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "One dataset row per image with original/thumbnail provenance, dimensions when stated, source page metadata, stable image ID and a labelled engine. Per-query completeness telemetry is in the SUMMARY key-value record.",
"properties": {
"images": {
"description": "Dataset containing all scraped image rows. Every row states its engine and whether imageUrl is an original, a thumbnail or a crawler-only URL.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Scraped Images",
"type": "string"
},
"summary": {
"description": "Per-run and per-query resultsRequested, resultsReturned, pagesFetched, stopReason and fallbackAttempts.",
"template": "{{links.apiDefaultKeyValueStoreUrl}}/records/SUMMARY",
"title": "Completeness summary",
"type": "string"
}
},
"title": "Google Image Search Results & Metadata Scraper Output",
"type": "object"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"fields": {
"properties": {
"aspectRatio": {
"description": "width divided by height, rounded to three decimals",
"nullable": true,
"type": "number"
},
"contentUrl": {
"description": "URL of the web page containing the image",
"nullable": true,
"type": "string"
},
"engine": {
"description": "The engine that actually produced this row",
"enum": [
"google",
"bing",
"duckduckgo",
"unknown"
],
"type": "string"
},
"fallbackReason": {
"description": "Why fallback was used, e.g. google_captcha",
"nullable": true,
"type": "string"
},
"fetchedAt": {
"description": "ISO-8601 UTC timestamp when the query was fetched",
"nullable": true,
"type": "string"
},
"fileFormat": {
"description": "Image format derived from the URL extension, when known",
"nullable": true,
"type": "string"
},
"googleUrl": {
"description": "Google imgres reference URL, when the row came from Google",
"nullable": true,
"type": "string"
},
"hasOriginal": {
"description": "True when imageUrl is an original source-site URL",
"type": "boolean"
},
"imageHeight": {
"description": "Original image height in pixels, when the engine states it",
"nullable": true,
"type": "integer"
},
"imageId": {
"description": "Stable ID derived from the image URL or Google result key",
"nullable": true,
"type": "string"
},
"imageUrl": {
"description": "Best available image URL; inspect imageUrlType to see whether it is the original or a thumbnail",
"type": "string"
},
"imageUrlType": {
"description": "Whether imageUrl is the source original, an engine thumbnail, a crawler-only URL, or unknown",
"enum": [
"original",
"thumbnail",
"crawler_only",
"unknown"
],
"type": "string"
},
"imageWidth": {
"description": "Original image width in pixels, when the engine states it",
"nullable": true,
"type": "integer"
},
"isCrawlerOnly": {
"description": "True when imageUrl is hosted or cached by a search engine rather than the source site",
"type": "boolean"
},
"isFallback": {
"description": "True when the row came from a fallback engine rather than Google",
"type": "boolean"
},
"orientation": {
"description": "landscape, portrait or square, derived from the stated dimensions",
"nullable": true,
"type": "string"
},
"origin": {
"description": "Legacy field: domain of the source page, or of the image host when no page is known",
"nullable": true,
"type": "string"
},
"page": {
"description": "Result page or scroll batch the row was read from",
"nullable": true,
"type": "integer"
},
"position": {
"description": "1-based rank within the query's returned rows",
"type": "integer"
},
"query": {
"description": "The search query that produced this row",
"type": "string"
},
"retrievalMethod": {
"description": "How the row was read, e.g. google_dom_sidepanel or bing_async_html",
"nullable": true,
"type": "string"
},
"searchUrl": {
"description": "The search URL used for this query",
"nullable": true,
"type": "string"
},
"siteName": {
"description": "Site name the engine displays, or the source domain when no display name is available",
"nullable": true,
"type": "string"
},
"sourceDomain": {
"description": "Hostname of the source page containing the image",
"nullable": true,
"type": "string"
},
"sourcePageTitle": {
"description": "Title of the source page containing the image",
"nullable": true,
"type": "string"
},
"thumbnailHeight": {
"description": "Thumbnail height in pixels, when the engine states it",
"nullable": true,
"type": "integer"
},
"thumbnailUrl": {
"description": "URL of the engine's cached thumbnail",
"nullable": true,
"type": "string"
},
"thumbnailWidth": {
"description": "Thumbnail width in pixels, when the engine states it",
"nullable": true,
"type": "integer"
},
"title": {
"description": "Page title shown for the image, when it is not a generic placeholder",
"nullable": true,
"type": "string"
}
},
"type": "object"
},
"title": "Google Images",
"views": {
"overview": {
"display": {
"component": "table",
"properties": {
"engine": {
"format": "text",
"label": "Engine"
},
"imageHeight": {
"format": "number",
"label": "Height"
},
"imageUrl": {
"format": "text",
"label": "Image URL"
},
"imageUrlType": {
"format": "text",
"label": "URL type"
},
"imageWidth": {
"format": "number",
"label": "Width"
},
"position": {
"format": "number",
"label": "Position"
},
"query": {
"format": "text",
"label": "Query"
},
"sourceDomain": {
"format": "text",
"label": "Source domain"
},
"title": {
"format": "text",
"label": "Title"
}
}
},
"title": "Images",
"transformation": {
"fields": [
"query",
"position",
"engine",
"imageUrlType",
"title",
"sourceDomain",
"imageUrl",
"imageWidth",
"imageHeight"
]
}
},
"provenance": {
"display": {
"component": "table",
"properties": {
"engine": {
"format": "text",
"label": "Engine"
},
"fallbackReason": {
"format": "text",
"label": "Fallback reason"
},
"fetchedAt": {
"format": "text",
"label": "Fetched at"
},
"hasOriginal": {
"format": "boolean",
"label": "Has original"
},
"imageId": {
"format": "text",
"label": "Image ID"
},
"imageUrlType": {
"format": "text",
"label": "URL type"
},
"isCrawlerOnly": {
"format": "boolean",
"label": "Crawler only"
},
"isFallback": {
"format": "boolean",
"label": "Fallback"
},
"page": {
"format": "number",
"label": "Page"
},
"position": {
"format": "number",
"label": "Position"
},
"query": {
"format": "text",
"label": "Query"
},
"retrievalMethod": {
"format": "text",
"label": "Method"
},
"searchUrl": {
"format": "text",
"label": "Search URL"
}
}
},
"title": "Provenance",
"transformation": {
"fields": [
"query",
"position",
"page",
"engine",
"retrievalMethod",
"isFallback",
"fallbackReason",
"imageId",
"imageUrlType",
"isCrawlerOnly",
"hasOriginal",
"searchUrl",
"fetchedAt"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Google Image Search Results & Metadata Scraper
Search Google Images for one or many queries and get one row per image, with an honest label on what each URL actually is. Google is tried first. If Google blocks or returns nothing, the default path returns explicitly labelled Bing/DuckDuckGo rows; set googleOnly=true for a strict Google-only contract that fails instead.
What this actor does
- Runs one or more Google Images queries in a single run.
- Exposes Google's own size, colour, type, file-type, time and usage-rights filters, plus country, language and SafeSearch.
- Captures the original image URL when Google exposes it, and tells you when it only has a thumbnail (
imageUrlType,isCrawlerOnly,hasOriginal). - Records the source page, source domain, site name, result position and page/scroll batch.
- Gives every row a stable
imageIdderived from the image URL or Google's result key. - Writes a
SUMMARYkey-value record with per-queryresultsRequested,resultsReturned,pagesFetched,stopReasonandfallbackAttempts.
Google-first with labelled fallback
The default contract is labelled fallback: googleOnly is false and enableFallback is true. Google is always tried first. If Google is blocked or has no results, the actor tries Bing Images (plain HTTP) and DuckDuckGo Images, in that order. Every fallback row carries:
engine-bing,duckduckgo, orgoogleisFallback-truefor every fallback rowfallbackReason- why Google was not used, e.g.google_captcha
Fallback is never silent and never changes the engine value. A Bing row is always labelled Bing.
For a strict Google-only run, set googleOnly=true and enableFallback=false. If Google is blocked or has no results, the run fails with an explicit status instead of returning another engine.
Output fields
Every row keeps the legacy field names and adds provenance and completeness fields. Empty optional values are omitted; null and sentinel values are never written.
| Field | Meaning |
|---|---|
query |
Query that produced the row |
position |
1-based rank within the query's returned rows |
page |
Result page or scroll batch the row was read from |
engine |
google, bing, duckduckgo or unknown |
retrievalMethod |
How the row was read, e.g. google_dom_sidepanel, google_dom_thumbnail, bing_async_html |
isFallback |
true when the row came from a fallback engine |
fallbackReason |
Why fallback was used |
searchUrl |
Search URL used for this query |
fetchedAt |
ISO-8601 UTC fetch timestamp |
imageId |
Stable ID derived from the image URL or Google result key |
imageUrl |
Best available image URL |
imageUrlType |
original, thumbnail, crawler_only or unknown |
isCrawlerOnly |
true when imageUrl is a search-engine cached/thumbnail URL |
hasOriginal |
true when imageUrl is the source site's original |
imageWidth, imageHeight |
Original dimensions, only when the engine states them |
aspectRatio, orientation |
Derived from the stated dimensions |
fileFormat |
Format from the URL extension, when known |
thumbnailUrl |
Engine-cached thumbnail |
thumbnailWidth, thumbnailHeight |
Thumbnail dimensions, when stated |
title |
Page title shown for the image, when it is not a generic placeholder |
sourcePageTitle |
Title of the source page |
origin |
Legacy source domain field |
sourceDomain |
Hostname of the source page |
siteName |
Site name shown by the engine, or the source domain |
contentUrl |
Page containing the image |
googleUrl |
Google imgres reference URL, when applicable |
imageUrl is the best URL available, not a promise that it is the original. Check imageUrlType or hasOriginal before treating it as full resolution.
Input
At least one queries entry (or the legacy query string) is required. Apify's validator cannot express "one of", so the actor fails clearly when neither is present.
| Field | Type | Default | Description |
|---|---|---|---|
queries |
array | - | One or more image search queries. The legacy query string is still accepted in code. |
maxResults |
integer | 100 |
Maximum rows per query, 1-500. This is a ceiling, not a guarantee. |
minWidth |
integer | 0 |
Drop images narrower than this many pixels; 0 disables. Rows without dimensions are dropped when set. |
minHeight |
integer | 0 |
Drop images shorter than this many pixels; 0 disables. |
country |
select | US |
Two-letter country code for Google gl / Bing cc |
language |
select | en |
Language code for Google hl / Bing setlang |
safeSearch |
select | active |
active or off |
imageSize |
select | any | large, medium, icon, or a minimum megapixel bucket from 2mp to 70mp |
imageColor |
select | any | Full colour, black and white, transparent, or a specific colour |
imageType |
select | any | Photo, face, clip art, line drawing, animated |
fileType |
select | any | JPEG, PNG, GIF, BMP, SVG, WebP, ICO |
timeRange |
select | any | Past hour, day, week, month or year |
usageRights |
select | any | Google's four usage-rights labels |
googleOnly |
boolean | false |
Fail clearly instead of using fallback |
enableFallback |
boolean | true |
Allow labelled Bing/DuckDuckGo fallback when googleOnly is false |
The legacy query and maxResultsPerQuery keys are read in code for saved tasks. There is no proxy field in the schema; the actor never requires a user-supplied proxy or API key.
Example input
Strict Google-only query:
{
"queries": ["Alfons Mucha"],
"maxResults": 20,
"country": "US",
"language": "en",
"googleOnly": true
}
Labelled fallback allowed, with filters:
{
"queries": ["sunset landscape", "modern architecture"],
"maxResults": 100,
"country": "DE",
"language": "de",
"imageSize": "large",
"imageColor": "blue",
"imageType": "photo",
"safeSearch": "active",
"googleOnly": false,
"enableFallback": true
}
How to read a run
- A row with
engine: "google"andimageUrlType: "original"is a source-site image URL. - A row with
engine: "google"andimageUrlType: "thumbnail"is Google's cached thumbnail; the original was not exposed for that card. - A row with
engine: "bing"is a labelled fallback row. Bing exposes original image URLs and source pages directly. - The
SUMMARYkey-value record tells you how many rows were requested and returned per query, how many pages were read, why reading stopped, and which fallback engines were attempted.
Limits and honest notes
- Google Images typically runs out at roughly 300-400 results per query. Asking for 500 returns what Google has.
- Google sometimes exposes only thumbnails in the results DOM. The actor labels those rows
thumbnailrather than pretending they are originals. It attempts the side panel for up to 20 cards per query to recover originals. - A Google CAPTCHA or "unusual traffic" page is reported as
google_captcha, not as zero results. fileTypeis applied by Google server-side. On Bing fallback it is applied to the image URL extension locally, so URLs without a recognisable extension are excluded when this filter is set.- Bing's time filter has no "past hour" bucket; the
houroption uses Bing's 24-hour window on fallback. - The DuckDuckGo fallback reads its first image JSON batch only; it is a last resort after Bing. It has no size, colour, type, time or usage-rights facet, so it is skipped when one of those filters is set instead of returning rows that violate the filter.
minWidthandminHeightare applied to every engine. Rows with no published dimensions are dropped when either bound is set.dominantColorandrelatedSearchescome from Bing's response. Google does not expose a reliable dominant colour in its search metadata; file size is not shipped because it would require downloading or probing every image.- Usage-rights labels come from the search engine. They are not a legal guarantee; check the licence on
contentUrlbefore reuse. Bing's licence buckets do not match Google's four labels one-to-one, so fallback rows use the nearest Bing bucket. - New fields are additive. Existing field names (
query,imageUrl,imageWidth,imageHeight,thumbnailUrl,thumbnailWidth,thumbnailHeight,title,origin,contentUrl) are preserved.
FAQ
Why did a Google-only run fail?
Google returned a CAPTCHA, an error page, or no results. In Google-only mode that is a real failure and is reported as one. Set googleOnly to false and enableFallback to true if you want labelled Bing/DuckDuckGo rows instead.
Why is imageUrlType sometimes thumbnail?
The results page did not expose the source image URL for that card. The actor will not label a Google thumbnail as an original.
Why are dimensions missing on some rows?
The engine did not state them. The actor omits the field rather than writing 0 or guessing.
Does this download images? No. It returns URLs and metadata. Fetch the image files yourself.
Is this affiliated with Google? No. It reads public image search results as an independent third-party tool.
Can I use the same input as before?
Yes for the common case: a saved task with query and maxResults still runs because the legacy keys are mapped in code. Batch users should move to queries and maxResults (per query).
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build cKnlChhWEIvPfT67X. Documentation is regenerated from the default published build; private drafts are not included.