# HasData integrations: google SERP and web scraping

> Run a batch search, start a batch scrape and start a crawler job in HasData, and start a workflow when HasData sends “Scraper job started”.

**Canonical page:** https://tray.ai/connectors/hasdata-integrations/
**Categories:** Data and analytics
**Connects through:** HTTP Connector

## Overview

HasData is a web scraping service that returns structured data from websites, Google search, Google Maps and other sources, with proxies and headless browsers handled for you. Tray.ai connects to HasData through the HTTP Connector, so your workflows can call the HasData API alongside the rest of your stack.

## Use cases

### Google SERP

Read google serp in HasData from any Tray.ai workflow. The HasData API covers calls such as search Google results and run a batch search.

- Search Google results
- Run a batch search

### Web scraping

Read and create web scraping in HasData from any Tray.ai workflow. The HasData API covers calls such as scrape a web page and start a batch scrape.

- Scrape a web page
- Start a batch scrape
- Get batch scrape results

### Google Maps

Read google maps in HasData from any Tray.ai workflow. The HasData API covers calls such as search Google Maps and get place reviews.

- Search Google Maps
- Get place reviews
- Get place photos

### Scraper jobs

Read and create scraper jobs in HasData from any Tray.ai workflow. The HasData API covers calls such as start a crawler job and get job status.

- Start a crawler job
- Get job status
- Get job results

### HasData events

Start a Tray.ai workflow the moment something happens in HasData. HasData sends events such as scraper job started and data scraped to a Tray.ai webhook trigger.

- Scraper job started
- Data scraped
- Scraper job finished

## Challenges Tray.ai solves

### Keeping HasData credentials out of logs

A raw API call usually means pasting a key or token into the request, where it ends up in step inputs, logs, and screenshots.

**How Tray.ai helps:** Store HasData credentials once as a Tray.ai authentication and reference them from the HTTP Connector. Tray.ai masks authentication values in logs, so the secret never shows up in a step's input or output.

### Going from the HasData API docs to a working call

Translating an example request from API docs into a workflow step means copying the method, URL, headers, and body by hand.

**How Tray.ai helps:** Paste a cURL example from the HasData API docs into the HTTP Connector and Tray.ai fills in the method, URL, headers, and body for you.

### Handling files and non-JSON responses

Not every API answers in JSON. Some return XML, files, or binary data, or expect a multipart upload.

**How Tray.ai helps:** The HTTP Connector parses JSON and XML responses, returns files you can pass to the next step, and sends multipart form data for uploads.

## Frequently asked questions

### Does Tray.ai connect to HasData?

Yes. Tray.ai connects to HasData through the HTTP Connector, which calls the HasData API directly. Any call the HasData API documents can run as a step in a Tray.ai workflow.

### How does Tray.ai authenticate with HasData?

The HasData API uses an API key in a request header. You save it once as a Tray.ai authentication, and the HTTP Connector adds it to every request.

### Can I get a dedicated HasData connector?

HasData runs through the HTTP Connector rather than a dedicated connector. If your team wants one, the Tray.ai connector SDK can build a dedicated HasData connector from the HasData API.

## Learn more

- Intelligent Integration: https://tray.ai/platform/intelligent-ipaas/
- Merlin Agent Builder: https://tray.ai/platform/merlin-agent-builder/
- Agent Gateway for MCP: https://tray.ai/platform/agent-gateway/
- Book a demo: https://tray.ai/contact/
