Pricing
		 Your account will be charged only for posting a task. You can get the results of the task within the next 7 days for free.
The cost can be calculated on the Pricing page.
 Your account will be charged only for posting a task. You can get the results of the task within the next 7 days for free.
The cost can be calculated on the Pricing page.
Description of the fields for sending a request:
| Field name | Type | Description | 
|---|---|---|
| id | string | task identifier unique task identifier in our system in the UUID format you will be able to use it within 7 days to request the results of the task at any time | 
As a response of the API server, you will receive JSON-encoded data containing a tasks array with the information specific to the set tasks.
Description of the fields in the results array:
| Field name | Type | Description | 
|---|---|---|
| version | string | the current version of the API | 
| status_code | integer | general status code you can find the full list of the response codes here Note: we strongly recommend designing a necessary system for handling related exceptional or error conditions | 
| status_message | string | general informational message you can find the full list of general informational messages here | 
| time | string | execution time, seconds | 
| cost | float | total tasks cost, USD | 
| tasks_count | integer | the number of tasks in the tasksarray | 
| tasks_error | integer | the number of tasks in the tasksarray returned with an error | 
| tasks | array | array of tasks | 
| id | string | task identifier unique task identifier in our system in the UUID format | 
| status_code | integer | status code of the task generated by DataForSEO; can be within the following range: 10000-60000 you can find the full list of the response codes here | 
| status_message | string | informational message of the task you can find the full list of general informational messages here | 
| time | string | execution time, seconds | 
| cost | float | cost of the task, USD | 
| result_count | integer | number of elements in the resultarray | 
| path | array | URL path | 
| data | object | contains the same parameters that you specified in the POST request | 
| result | array | array of results | 
| keyword | string | keyword received in a POST array keyword is returned with decoded %## (plus symbol ‘+’ will be decoded to a space character) | 
| type | string | search engine type in a POST array | 
| se_domain | string | search engine domain in a POST array | 
| location_code | integer | location code in a POST array | 
| language_code | string | language code in a POST array | 
| datetime | string | date and time when the result was received in the UTC format: “yyyy-mm-dd hh-mm-ss +00:00” example: 2019-11-15 12:57:46 +00:00 | 
| items_count | integer | the number of results returned in the itemsarray | 
| items | array | elements of search results found in SERP | 
| page | integer | serial number of the returned HTML page | 
| date | string | date and time when the HTML page was scanned in the UTC format: “yyyy-mm-dd hh-mm-ss +00:00” example: 2019-11-15 12:57:46 +00:00 | 
| html | string | HTML page | 
Instead of ‘login’ and ‘password’ use your credentials from https://app.dataforseo.com/api-access
# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-access 
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
id="02261816-2027-0066-0000-c27d02864073" 
curl --location --request GET "https://api.dataforseo.com/v3/serp/google/organic/task_get/html/${id}" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw ""<?php
// You can download this file from here https://cdn.dataforseo.com/v3/examples/php/php_RestClient.zip
require('RestClient.php');
$api_url = 'https://api.dataforseo.com/';
try {
	// Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-access
	$client = new RestClient($api_url, null, 'login', 'password');
} catch (RestClientException $e) {
	echo "n";
	print "HTTP code: {$e->getHttpCode()}n";
	print "Error code: {$e->getCode()}n";
	print "Message: {$e->getMessage()}n";
	print  $e->getTraceAsString();
	echo "n";
	exit();
}
try {
	$result = array();
	// #1 - using this method you can get a list of completed tasks
	// GET /v3/serp/google/organic/tasks_ready
	// in addition to 'google' and 'organic' you can also set other search engine and type parameters
	// the full list of possible parameters is available in documentation
	$tasks_ready = $client->get('/v3/serp/google/organic/tasks_ready');
	// you can find the full list of the response codes here https://docs.dataforseo.com/v3/appendix/errors
	if (isset($tasks_ready['status_code']) AND $tasks_ready['status_code'] === 20000) {
		foreach ($tasks_ready['tasks'] as $task) {
			if (isset($task['result'])) {
				foreach ($task['result'] as $task_ready) {
					// #2 - using this method you can get results of each completed task
					// GET /v3/serp/google/organic/task_get/html/$id
					if (isset($task_ready['endpoint_html'])) {
						$result[] = $client->get($task_ready['endpoint_html']);
					}
					// #3 - another way to get the task results by id
					// GET /v3/serp/google/organic/task_get/html/$id
					/*
					if (isset($task_ready['id'])) {
						$result[] = $client->get('/v3/serp/google/organic/task_get/html/' . $task_ready['id']);
					}
					*/
				}
			}
		}
	}
	print_r($result);
	// do something with result
} catch (RestClientException $e) {
	echo "n";
	print "HTTP code: {$e->getHttpCode()}n";
	print "Error code: {$e->getCode()}n";
	print "Message: {$e->getMessage()}n";
	print  $e->getTraceAsString();
	echo "n";
}
$client = null;
?>const task_id = '02201650-1073-0066-2000-1d132bb28897';
const axios = require('axios');
axios({
    method: 'get',
    url: 'https://api.dataforseo.com/v3/serp/google/organic/task_get/html/' + task_id,
    auth: {
        username: 'login',
        password: 'password'
    },
    headers: {
        'content-type': 'application/json'
    }
}).then(function (response) {
    var result = response['data']['tasks'];
    // Result data
    console.log(result);
}).catch(function (error) {
    console.log(error);
});from client import RestClient
# You can download this file from here https://cdn.dataforseo.com/v3/examples/python/python_Client.zip
client = RestClient("login", "password")
# 1 - using this method you can get a list of completed tasks
# GET /v3/serp/google/organic/tasks_ready
# in addition to 'google' and 'organic' you can also set other search engine and type parameters
# the full list of possible parameters is available in documentation
response = client.get("/v3/serp/google/organic/tasks_ready")
# you can find the full list of the response codes here https://docs.dataforseo.com/v3/appendix/errors
if response['status_code'] == 20000:
    results = []
    for task in response['tasks']:
        if (task['result'] and (len(task['result']) > 0)):
            for resultTaskInfo in task['result']:
                # 2 - using this method you can get results of each completed task
                # GET /v3/serp/google/organic/html/$id
                if(resultTaskInfo['endpoint_html']):
                    results.append(client.get(resultTaskInfo['endpoint_html']))                
                '''
                # 3 - another way to get the task results by id
                # GET /v3/serp/google/organic/task_get/html/$id
                if(resultTaskInfo['id']):
                    results.append(client.get("/v3/serp/google/organic/task_get/html/" + resultTaskInfo['id']))
                '''
    print(results)
    # do something with result
else:
    print("error. Code: %d Message: %s" % (response["status_code"], response["status_message"]))using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace DataForSeoDemos
{
    public static partial class Demos
    {
        public static async Task serp_task_get()
        {
            var httpClient = new HttpClient
            {
                BaseAddress = new Uri("https://api.dataforseo.com/"),
                // Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-access
                DefaultRequestHeaders = { Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes("login:password"))) }
            };
            // #1 - using this method you can get a list of completed tasks
            // GET /v3/serp/google/organic/tasks_ready
            // in addition to 'google' and 'organic' you can also set other search engine and type parameters
            // the full list of possible parameters is available in documentation
            var response = await httpClient.GetAsync("/v3/serp/google/organic/tasks_ready");
            var tasksInfo = JsonConvert.DeserializeObject<dynamic>(await response.Content.ReadAsStringAsync());
            var tasksResponses = new List<object>();
            // you can find the full list of the response codes here https://docs.dataforseo.com/v3/appendix/errors
            if (tasksInfo.status_code == 20000)
            {
                if (tasksInfo.tasks != null)
                {
                    foreach (var tasks in tasksInfo.tasks)
                    {
                        if (tasks.result != null)
                        {
                            foreach (var task in tasks.result)
                            {
                                if (task.endpoint_html != null)
                                {
                                    // #2 - using this method you can get results of each completed task
                                    // GET /v3/serp/google/organic/task_get/html/$id
                                    var taskGetResponse = await httpClient.GetAsync((string)task.endpoint_html);
                                    var taskResultObj = JsonConvert.DeserializeObject<dynamic>(await taskGetResponse.Content.ReadAsStringAsync());
                                    if (taskResultObj.tasks != null)
                                    {
                                        var fst = taskResultObj.tasks.First;
                                        // you can find the full list of the response codes here https://docs.dataforseo.com/v3/appendix/errors
                                        if (fst.status_code >= 40000 || fst.result == null)
                                            Console.WriteLine($"error. Code: {fst.status_code} Message: {fst.status_message}");
                                        else
                                            tasksResponses.Add(fst.result);
                                    }
                                    // #3 - another way to get the task results by id
                                    // GET /v3/serp/google/organic/task_get/html/$id
                                    /*
                                    var tasksGetResponse = await httpClient.GetAsync("/v3/serp/google/organic/task_get/html/" + (string)task.id);
                                    var tasksResultObj = JsonConvert.DeserializeObject<dynamic>(await tasksGetResponse.Content.ReadAsStringAsync());
                                    if (tasksResultObj.tasks != null)
                                    {
                                        var fst = taskResultObj.tasks.First;
                                        // you can find the full list of the response codes here https://docs.dataforseo.com/v3/appendix/errors
                                        if (fst.status_code >= 40000 || fst.result == null)
                                            Console.WriteLine($"error. Code: {fst.status_code} Message: {fst.status_message}");
                                        else
                                            tasksResponses.Add(fst.result);
                                    }
                                    */
                                }
                            }
                        }
                    }
                }
                if (tasksResponses.Count > 0)
                    // do something with result
                    Console.WriteLine(String.Join(Environment.NewLine, tasksResponses));
                else
                    Console.WriteLine("No completed tasks");
            }
            else
                Console.WriteLine($"error. Code: {tasksInfo.status_code} Message: {tasksInfo.status_message}");
        }
    }
}The above command returns JSON structured like this:
{
  "version": "0.1.20200129",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0.3212 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "11151505-0696-0066-0000-340aec686f0d",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0.0684 sec.",
      "cost": 0.00,
      "result_count": 1,
      "path": [
        "v3",
        "serp",
        "google",
        "organic",
        "task_get",
        "html",
        "11151505-0696-0066-0000-340aec686f0d"
      ],
      "data": {
        "api": "serp",
        "function": "task_get",
        "se": "google",
        "se_type": "organic",
        "language_name": "English",
        "location_code": 2840,
        "keyword": "flight ticket new york san francisco",
        "tag": "tag1",
        "device": "desktop",
        "os": "windows" 
      },
      "result": [
        {
          "keyword": "flight ticket new york san francisco",
          "type": "organic",
          "se_domain": "google.com",
          "location_code": 2840,
          "language_code": "en",
          "datetime": "2019-11-15 13:05:36 +0000",
          "items_count": 1,
          "items": [
            {
              "page": 1,
              "date": "2019-11-15 13:05:36 +0000",
              "html": "