There are two approaches to retrieving data from Wayfair using our Scraper API. You can give us a full URL or pass parameters via the specifically built data source - Search .
Overview
Below is a quick overview of all the available data source
values we support with Wayfair.
Source Description Dedicated parser Submit any Wayfair URL you like.
Wayfair search result pages.
Although we do not have dedicated parsers for Wayfair sources, you can write your own parsing instructions with Custom Parser feature and get structured data.
You can jump to your preferred Wayfair page type by selecting its name on the right hand side menu. Each page contains the parameter table as well as code examples to help you get started with your query.
URL
The wayfair
source is designed to retrieve content from various Wayfair URLs. Instead of sending multiple parameters, you can provide us with a direct URL to your preferred Wayfair page. We do not strip any parameters or alter your URLs in any other way.
Query parameters
Parameter Description Default Value Direct URL (link) to Wayfair page
Device type and browser. The full list can be found here .
- required parameter
Code examples
In this example, we make a request to retrieve a result for a URL.
JSON cURL Python PHP C# Golang Java Node.js HTTP
Copy {
"source" : "wayfair" ,
"url" : "https://www.wayfair.com/keyword.php?keyword=sofa"
}
Copy curl --user "user:pass1" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" \
-d '{"source": "wayfair", "url": "https://www.wayfair.com/keyword.php?keyword=sofa"}'
Copy import requests
from pprint import pprint
# Structure payload.
payload = {
'source' : 'wayfair' ,
'url' : 'https://www.wayfair.com/keyword.php?keyword=sofa'
}
# Get response.
response = requests . request (
'POST' ,
'https://realtime.oxylabs.io/v1/queries' ,
auth = ( 'user' , 'pass1' ),
json = payload,
)
# Instead of response with job status and results url, this will return the
# JSON response with results.
pprint (response. json ())
Copy <? php
$params = array (
'source' => 'wayfair' ,
'url' => 'https://www.wayfair.com/keyword.php?keyword=sofa'
);
$ch = curl_init () ;
curl_setopt ( $ch , CURLOPT_URL , "https://data.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 , "user" . ":" . "pass1" ) ;
$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 ) ;
?>
Copy 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 = "YOUR_USERNAME" ;
const string Password = "YOUR_PASSWORD" ;
var parameters = new Dictionary < string , string >()
{
{ "source" , "wayfair" } ,
{ "url" , "https://www.wayfair.com/keyword.php?keyword=sofa" } ,
};
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);
}
}
}
Copy package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main () {
const Username = "YOUR_USERNAME"
const Password = "YOUR_PASSWORD"
payload := map [ string ] string {
"source" : "wayfair" ,
"url" : "https://www.wayfair.com/keyword.php?keyword=sofa" ,
}
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))
}
Copy import okhttp3 . * ;
import org . json . JSONObject ;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization" ;
public static final String USERNAME = "YOUR_USERNAME" ;
public static final String PASSWORD = "YOUR_PASSWORD" ;
public void run () {
JSONObject jsonObject = new JSONObject() ;
jsonObject . put ( "source" , "wayfair" );
jsonObject . put ( "url" , "https://www.wayfair.com/keyword.php?keyword=sofa" );
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)
. 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 ()) {
assert response . body () != null ;
System . out . println ( response . body () . string ());
} catch ( Exception exception) {
System . out . println ( "Error: " + exception . getMessage ());
}
System . exit ( 0 );
}
public static void main ( String [] args) {
new Thread( new Main()) . start ();
}
}
Copy import fetch from 'node-fetch' ;
const username = 'YOUR_USERNAME' ;
const password = 'YOUR_PASSWORD' ;
const body = {
'source' : 'wayfair' ,
'url' : 'https://www.wayfair.com/keyword.php?keyword=sofa' ,
'parse' : true
};
const response = await fetch ( 'https://realtime.oxylabs.io/v1/queries' , {
method : 'post' ,
body : JSON .stringify (body) ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic ' + Buffer .from ( ` ${ username } : ${ password } ` ) .toString ( 'base64' ) ,
}
});
console .log ( await response .json ());
Copy # URL has to be encoded to escape `&` and `=` characters:
# URL: https://www.wayfair.com/keyword.php?keyword=sofa
# Encoded URL: https%3A%2F%2Fwww.wayfair.com%2Fkeyword.php%3Fkeyword%3Dsofa
https://realtime.oxylabs.io/v1/queries?source=google&url=https%3A%2F%2Fwww.wayfair.com%2Fkeyword.php%3Fkeyword%3Dsofa&access_token=12345abcde
The example above uses the Realtime integration method. If you would like to use some other integration method in your query (e.g. Push-Pull or Proxy Endpoint ), refer to the integration methods section.
Search
The wayfair_search
source is designed to retrieve Wayfair Search results (SERP).
Query parameters
Parameter Description Default Value Number of pages to retrieve
Number of results to retrieve in each page. Available values: 24
, 48
, 96
Device type and browser. The full list can be found here .
- required parameter
Code examples
In the code example below, we make a request to retrieve 4
wayfair.com
search results pages, starting from page #2
, for search term sofa
.
JSON cURL Python PHP C# Golang Node.js HTTP
Copy {
"source" : "wayfair_search" ,
"query" : "sofa" ,
"start_page" : 2 ,
"pages" : 4
}
Copy curl --user "user:pass1" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" \
-d '{"source": "wayfair_search", "query": "sofa", "start_page": 2, "pages": 4}'
Copy import requests
from pprint import pprint
# Structure payload.
payload = {
'source' : 'wayfair_search' ,
'query' : 'sofa' ,
'start_page' : 2 ,
'pages' : 4
}
# Get response.
response = requests . request (
'POST' ,
'https://realtime.oxylabs.io/v1/queries' ,
auth = ( 'user' , 'pass1' ),
json = payload,
)
# Print prettified response to stdout.
pprint (response. json ())
Copy <? php
$params = array (
'source' => 'wayfair_search' ,
'query' => 'sofa' ,
'start_page' => 2 ,
'pages' => 4
);
$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 , "user" . ":" . "pass1" ) ;
$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 ) ;
Copy 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 = "YOUR_USERNAME" ;
const string Password = "YOUR_PASSWORD" ;
var parameters = new {
source = "wayfair_search" ,
query = "sofa" ,
start_page = 2 ,
pages = 4 ,
};
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);
}
}
}
Copy package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main () {
const Username = "YOUR_USERNAME"
const Password = "YOUR_PASSWORD"
payload := map [ string ] interface {}{
"source" : "wayfair_search" ,
"query" : "sofa" ,
"start_page" : 2 ,
"pages" : 4 ,
}
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))
}
Copy import fetch from 'node-fetch' ;
const username = 'YOUR_USERNAME' ;
const password = 'YOUR_PASSWORD' ;
const body = {
'source' : 'wayfair_search' ,
'query' : 'sofa' ,
'start_page' : 2 ,
'pages' : 4 ,
};
const response = await fetch ( 'https://realtime.oxylabs.io/v1/queries' , {
method : 'post' ,
body : JSON .stringify (body) ,
headers : {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic ' + Buffer .from ( ` ${ username } : ${ password } ` ) .toString ( 'base64' ) ,
}
});
console .log ( await response .json ());
Copy https://realtime.oxylabs.io/v1/queries?source=wayfair_search&query=sofa&start_page=2&pages=4&access_token=12345abcde
The example above uses the Realtime integration method. If you would like to use some other integration method in your query (e.g. Push-Pull or Proxy Endpoint ), refer to the integration methods section.