Constructing Product Queries

The Datafiniti API lets you build out a wide variety of search queries so you can get the exact data you want.

Querying a single field

The simplest query you can do is querying a single field. Here's an example:

{
  "query": "categories:shoes"
}

This tells the API to search the product database for any product that have the value shoes in its categories field.

You can do similar queries on any of the fields in the product schema. Here's an example that queries the name field:

{
  "query": "name:printer"
}

Querying multiple fields

You can run more complicated queries by combining fields with various boolean operators (e.g., AND OR). For example:

{
  "query": "categories:laptops AND brand:Apple"
}

This returns any products that are categorized as laptops and have Apple set as their brand.

You can use the OR operator to run broader queries. For example:

{
  "query": "categories:laptops OR categories:desktops"
}

That's not all though. We can group fields and operators with parentheses to do some really fancy stuff:

{
	"query": "(categories:laptops OR categories:desktops) AND brand:Apple"
}

Querying multiple values

If you want to query multiple values within the same field, there is a simple way to do this. For example:

{
  "query": "categories:(laptops OR desktops OR tablets)"
}

This returns any products matching any of the above categories. This is much simpler than:

{
  "query": "categories:laptops OR categories:desktops OR categories:tablets"
}

Wildcards

You can use * to query a field for any value, like this:

{
  "query": "prices:*"
}

This will return any products that have pricing information. This is helpful if we want to make sure any products we get back are guaranteed to have certain fields filed out.

Wildcards can do more though. You can also append * to the value we're searching on to broaden its potential matches. For example:

{
  "query": "categories:comput*"
}

This will return products with any of the following in their categories field: computer, computers, computing, computation, and so on.

Querying sub-fields

Several fields in our schema have sub-fields. For example, prices has sub-fields like amountMin, currency, and others. Everything you can do to query fields, you can also do to query sub-fields. For example:

{
  "query": "prices.amountMin:3"
}

will return all products that have a price of 3.

It's important to note here that querying on sub-fields will not only return sub-objects that match your query. The entire field will be returned.

For instance, if a product look likes this:

{
  "name": "example product",
  "prices:": [
    {
      "amountMin": 3
    },
    {
      "amounMin": 4
    }
  ]
}

then you'll see both amountMin values in your data.

Compound Queries on sub-fields

Along with querying individual sub-fields, you can also query for sub-objects that have multiple fields that meet specific requirements. For example, you can find all products where at least one reviewer was from Austin and gave the business a five star rating.

{
   "query":"{ reviews.rating:5 AND reviews.userProvince:Austin }",
    "num_records":10
}

The key thing to note for these queries is that any sub-field requirements that you want to match within a single sub-object must be contained within curly brackets "{ }"

Range queries

Any fields that are dates, integers, or doubles will let you search them based on a range.

{
  "query": "dateAdded:[2017-01-01 TO 2017-02-01]"
}

will return all products that have been added to the database between Jan 1, 2017 and Feb 2, 2017.

You can do unbounded range queries as well, like:

{
  "query": "dateAdded:[2017-01-01 TO *]"
}

This will return all products have been added since Jan 1, 2017 until the current date.

You can also use comparison operators like >, >=, <=, and <. These are helpful when you want to search for products that are cheaper or more expensive than certain limits. E.g.:

{
  "query": "prices.amountMin:>10"
}

returns all products that have a price greater than 10.

Excluding values

For some searches, you'll want to exclude certain values from returning. For example, let's say you wanted to find all laptops, except for those made by Apple. You would use the - operator to negate Apple values:

{
  "query": "categories:laptop AND -brand:Apple"
}

Searching by Address

You can use the API to search via the address field. For example, if you would like to find 2815 Manor Rd you could use the following query.

{
    "query":"address:\"2815 Manor Rd\" AND postalCode:78722"
}

However there are many different ways to approach searching via an address. You can learn more here about Search address in property or business data For more information on our postal code abbreviations, you can visit here: postal code abbreviations

Count Feature

As an alternative or used for testing purposes you can set your num_records to 0 in your product search query. This is will only return the num_found of the query and will cost 0 credits to search. Try it out

{
  "query": "categories:shoes",
  "num_records":0
}

📘

Count Feature

Please note that this is feature is only for paid accounts. So please check your account plan or contact [email protected].

Paging Over Results

As an alternative to running a download, you can also use the API to page through the data. This approach allows you to consume one chunk at a time.

POST https://api.datafiniti.co/v4/products/paginate?page=1&limit=50
{
  "query": "keys:*"
}

The pagination endpoint uses the following parameters:

  • page - You specify which chunk of data you would like to access. You can iterate the page to work your way through all of the results. You cannot paginate further than the 10,000th record.
  • limit - This specifies the number of results you want returned within the page. The maximum number of results that can be returned per page is 1,000.