Lens
Our google_lens source enables you to extract results from the Google Lens feature while performing an image search.
Request samples
The API sends a request to the Google Lens feature to retrieve structured data related to the content of an image.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "google_lens",
"query": "https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg",
"parse": "true"
}'import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'google_lens',
'query': 'https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg',
'parse': 'true'
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# Print prettified response to stdout.
pprint(response.json())
const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "google_lens",
query: "https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg",
parse: true,
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization:
"Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();https://realtime.oxylabs.io/v1/queries?source=google_lens&query=https%3A%2F%2Fwww.beginningboutique.com.au%2Fcdn%2Fshop%2Ffiles%2FFlossie-Pink-Maxi-Sleeveless-Dress_750x.jpg&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'google_lens',
'query' => 'https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg',
'parse' => true
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");
$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result;
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
payload := map[string]interface{}{
"source": "google_lens",
"query": "https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg",
"parse": true,
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
response, _ := client.Do(request)
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new {
source = "google_lens",
query = "https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg",
parse = true
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
var response = await client.SendAsync(requestMessage);
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
}
}package org.example;
import okhttp3.*;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "google_lens");
jsonObject.put("query", "https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg");
jsonObject.put("parse", true);
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}{
"source": "google_lens",
"query": "https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg",
"parse": "true"
}We use synchronous Realtime integration method in our examples. If you would like to use Proxy Endpoint or asynchronous Push-Pull integration, refer to the integration methods section.
Request parameter values
Generic
Basic setup and customization options for scraping Google Lens results.
source
Sets the scraper.
google_lens
query
The URL of the image to be searched for.
-
user_agent_type
Device type and browser. The full list can be found here.
desktop
- mandatory parameter
Localization
Adapt search results to specific geographical locations and languages.
geo_location
The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures here.
-
locale
Accept-Language header value which changes your Google search page web interface language. More info.
-
Structured data
{
"results": [
{
"content": {
"results": {
"organic": [
{
"pos": 1,
"url": "https://www.pinterest.com/shopping/free-people-pink-maxi-dress/903333914404/",
"title": "Free People Pink Maxi Dress - Shop on Pinterest",
"domain": "Pinterest",
"pos_overall": 1,
"url_thumbnail": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR5hGHj6ima-cDFEYeMNi-7ngOomqkHz_1Joc4_DVA5gDTprXGJ"
},
...
{
"pos": 59,
"url": "https://www.jjshouse.com/Sheath-Column-One-Shoulder-Floor-Length-Chiffon-Junior-Bridesmaid-Dress-With-Ruffle-Lace-Beading-009119572-g119572",
"title": "Sheath/Column One-Shoulder Floor-Length Chiffon Junior Bridesmaid Dress With Ruffle Lace Beading",
"domain": "JJsHouse.com",
"pos_overall": 59,
"url_thumbnail": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR8evuMBA8z7Aa8mcYh97Y2hbpB3YIEV0ZSs2gkpYIyF3pmyj_X"
}
],
"total_results_count": 59
},
"parse_status_code": 12000
},
"created_at": "2024-03-13 15:07:42",
"updated_at": "2024-03-13 15:07:45",
"page": 1,
"url": "https://lens.google.com/uploadbyurl?url=https://www.beginningboutique.com.au/cdn/shop/files/Flossie-Pink-Maxi-Sleeveless-Dress_750x.jpg&uule=w+CAIQICINdW5pdGVkIHN0YXRlcw&gl=us&hl=en",
"job_id": "7173696230097183745",
"status_code": 200,
"parser_type": ""
}
],
}Output data dictionary
JSON structure
This table outlines the key elements of a Google Lens search result. The table below presents a detailed list of each SERP feature we parse, along with its description and data type. The table also includes some metadata.
results
A dictionary containing the results of the search.
array
results.organic
A list of unpaid image results with their respective details.
array
total_results_count
The total number of results found for the image URL.
integer
parse_status_code
The status code of the parsing job. You can see the parser status codes described here.
integer
created_at
The timestamp when the scraping job was created.
timestamp
updated_at
The timestamp when the scraping job was finished.
timestamp
page
Page number relative to the Google SERP pagination.
integer
job_id
The ID of the job associated with the scraping job.
string
status_code
The status code of the scraping job. You can see the scraper status codes described here.
integer
Organic
Google Lens accounts multiple factors to deliver the most relevant and useful information to users based on the content of the image user uploads.

...
{
"pos": 1,
"url": "https://www.pinterest.com/shopping/free-people-pink-maxi-dress/903333914404/",
"title": "Free People Pink Maxi Dress - Shop on Pinterest",
"domain": "Pinterest",
"pos_overall": 1,
"url_thumbnail": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR5hGHj6ima-cDFEYeMNi-7ngOomqkHz_1Joc4_DVA5gDTprXGJ"
},
...pos
An indicator denoting the position of a given item among all Google Lens results.
integer
url
The URL of the Google Lens result.
string
title
The title of the result.
string
domain
The source of the Google Lens result.
string
pos_overall
An indication of the position of the Google Lens result within the SERP.
integer
url_thumbnail
The base64-encoded thumbnail images of the Google Lens result.
string
Last updated
Was this helpful?

