> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baselayer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adding Online Presence to a Business Search

> Add online presence checks to a Business Search, so one call returns both KYB and web data.

### When to use this path

This path is best when your team wants a single API call, and your applicant base is primarily registered businesses. If your platform onboards sole proprietors or you want online presence data on every application regardless of KYB outcome, run `POST /web_presence_requests` as a separate call instead. See the [Overview](https://docs.baselayer.com/docs/online-presence-basics.md) for the full decision guide.

***

### The `options` array

> **Online presence data is not returned unless you include `options` in your request.** Sending `options: []`, or omitting the field entirely, returns `orderables: []` - no Website Analysis, no Industry Prediction, no social or review data. This is the most common reason customers don't see web presence data in their responses.

Include `options` in your `POST /searches` payload with one or more of the values below:

| Value | What it returns |
| :- | :- |
| `Order.WebsiteAnalysis` | A `WebsiteAnalysisRequest` orderable tracking object in `orderables[]`. Retrieve the full analysis via `GET /website_analysis_requests/{id}`. If a `website` was submitted and differs from the one Baselayer discovered, two `WebsiteAnalysisRequest` orderables are returned - one per domain analyzed. |
| `Order.NaicsPrediction` | A `NAICSPredictionRequest` orderable tracking object in `orderables[]`. Retrieve the full prediction via `GET /naics_prediction_requests/{id}`. |
| `Order.Enhanced` | The full bundle: Website Analysis + Industry Prediction + Social Profiles + Reviews. Website Analysis and Industry Prediction generate orderable tracking objects as above. Social profiles and reviews are stored directly under `business.social_profiles[]` and `business.reviews[]` with no separate orderable. Also merges discovered addresses and officers into the business object - see below. Must be sent with `Order.WebsiteAnalysis` and `Order.NaicsPrediction`. |
| `Order.Pep` | PEP screening on the business and its officers. |

The granular sub-product orders - `Order.SocialMedia`, `Order.ReviewSummary`, `Order.ReviewFull`, and `Order.DirectoryListing` - are only available on `POST /web_presence_requests`.

***

### Why `Order.Enhanced` is more than a bundle

`Order.Enhanced` covers the same four sub-products as requesting Website Analysis, Industry Prediction, Social Profiles, and Reviews individually, but it does something none of those individual orders do: it **merges discovered addresses and officers back into the business object**.

Any addresses Baselayer finds through Website Analysis, social profiles, or reviews are added to `business.addresses[]`. Any officers discovered online are added to `business.business_officers[]`, alongside their `sources` and `titles`. These enriched fields feed directly into the KYB matching logic, which can meaningfully increase match rates for:

* Newer businesses with thin Secretary of State records
* Businesses operating under a DBA or trade name
* Common business names where the address is the primary disambiguator

Because `Order.Enhanced` performs a broader discovery across multiple sources, it takes on average around 25 seconds to complete - longer than a standard `POST /searches` call. `Order.WebsiteAnalysis` also runs inside the search and adds time. `Order.NaicsPrediction` can finish after the search completes unless `Order.Enhanced` is requested. For high-value KYB use cases where match rate matters more than speed, it is the recommended default.

***

### Where the data lives in the response

| Data | Location |
| :- | :- |
| Match flags (`business_address_match`, `business_website_match`, etc.) | Top level |
| `website_analysis` full result | Retrieved via `GET /website_analysis_requests/{id}` |
| `industry_prediction` full result | Retrieved via `GET /naics_prediction_requests/{id}` (returned under `predicted_naics`) |
| `business.social_profiles[]` | Nested under `business` (requires `Order.Enhanced`) |
| `business.reviews[]` | Nested under `business` (requires `Order.Enhanced`) |
| `business.addresses[]` | Nested under `business`, expanded by `Order.Enhanced` |
| `business.business_officers[]` | Nested under `business`, expanded by `Order.Enhanced` |
| `orderables[]` | Top level - tracking objects for Website Analysis and Industry Prediction, with IDs and retrieval URLs |

For field-level definitions and a clear structure across all paths, see [Response Reference](https://docs.baselayer.com/docs/online-presence-response-reference.md).

***

### Sample request

In this example, the applicant submitted `acmecorp-solutions.com` as their website, but Baselayer independently discovered `acmecorp.com` as the operating domain. This triggers two `WebsiteAnalysisRequest` orderables - one per domain analyzed.

```json theme={null}
{
  "name": "Acme Corp",
  "address": "123 Main St, New York, NY 10001",
  "website": "acmecorp-solutions.com",
  "options": [
    "Order.Enhanced",
    "Order.WebsiteAnalysis",
    "Order.NaicsPrediction"
  ]
}
```

***

### Sample response

```json theme={null}
{
  "id": "8535e9f2-7de7-40bb-b263-7dd415859657",
  "state": "COMPLETED",
  "business_address_match": "EXACT",
  "business_name_match": "EXACT",
  "business_website_match": false,
  "business": {
    "name": "Acme Corp",
    "addresses": [
      {
        "city": "New York",
        "state": "NY",
        "street": "123 Main St",
        "zip": "10001",
        "sources": ["SOS", "Online"]
      }
    ],
    "business_officers": [
      {
        "name": "Jane Smith",
        "sources": ["SOS", "Online"],
        "titles": ["CEO", "chief executive officer", "director"]
      }
    ],
    "social_profiles": [
      {
        "site": "linked_in:company",
        "url": "https://www.linkedin.com/company/acme-corp",
        "confidence": "high",
        "metadata": {
          "followers_count": 1840,
          "company_size_range": "51-200 employees",
          "bio": "Industrial supply solutions across the northeast US."
        }
      }
    ],
    "reviews": null
  },
  "orderables": [
    {
      "id": "0ebf97c6-5191-41eb-bbc6-90e99c43c6d0",
      "option": "Order.WebsiteAnalysis",
      "type": "WebsiteAnalysisRequest",
      "url": "https://api.baselayer.com/website_analysis_requests/0ebf97c6-5191-41eb-bbc6-90e99c43c6d0"
    },
    {
      "id": "a9ca33e5-e7c7-4a4f-ba4d-37ec3dd83c9f",
      "option": "Order.WebsiteAnalysis",
      "type": "WebsiteAnalysisRequest",
      "url": "https://api.baselayer.com/website_analysis_requests/a9ca33e5-e7c7-4a4f-ba4d-37ec3dd83c9f"
    },
    {
      "id": "d83552b5-3e1a-4c9f-a812-1f6e3db72c44",
      "option": "Order.NaicsPrediction",
      "type": "NAICSPredictionRequest",
      "url": "https://api.baselayer.com/naics_prediction_requests/d83552b5-3e1a-4c9f-a812-1f6e3db72c44"
    }
  ]
}
```

This response illustrates three important behaviors:

* **Website Analysis and Industry Prediction are not inline.** The main response only contains orderable tracking objects. To access the full `website_analysis` or `industry_prediction` data, call `GET` on each orderable's `url`.
* **Two `WebsiteAnalysisRequest` orderables.** The applicant submitted `acmecorp-solutions.com`, but Baselayer independently discovered `acmecorp.com`. Both domains are analyzed and each gets its own orderable, but the two entries in `orderables[]` look identical. Call `GET /website_analysis_requests/{id}` on each to determine which domain was analyzed. `business_website_match: false` reflects that the submitted domain did not match the discovered one.
* **Social profiles are inline, reviews are null.** `business.social_profiles[]` is populated directly in the response when `Order.Enhanced` is requested. `business.reviews` is `null` when no reviews were found - no orderable is generated for these two items.

***

### What happens when Business Search fails

> If the submitted business doesn't match any registration record (common for sole proprietors and other unregistered entities) `/searches` returns `state: FAILED` and **orderables are not triggered**. The `orderables[]` array will be empty even when valid `options` were included in the request.
>
> If your platform onboards applicants who may not have an SoS registration, use `POST /web_presence_requests` as a follow-up call - or as your primary path - to ensure online presence data is always returned. See [The Web Presence API](https://docs.baselayer.com/docs/web-presence-api.md).

***

### Webhooks

Each orderable fires its own lifecycle events. When using `Order.Enhanced` (or any combination of orderables), you can expect the following events:

| Event | When it fires |
| :- | :- |
| `BusinessSearch.submitted` | When the search is created |
| `WebsiteAnalysisRequest.submitted` | When the website analysis job starts |
| `NAICSPredictionRequest.submitted` | When the industry prediction job starts |
| `WebsiteAnalysisRequest.completed` | When website analysis results are ready |
| `NAICSPredictionRequest.completed` | When industry prediction results are ready |
| `BusinessSearch.completed` | When the search is complete. Without `Order.Enhanced`, industry prediction can finish after this event; wait for `NAICSPredictionRequest.completed` |

Each `.completed` event payload includes the orderable `id` and a `url` for retrieving full results.

***

### Related guides

* [Online Presence: Basics](https://docs.baselayer.com/docs/online-presence-basics.md) — integration path decision guide
* [The Web Presence API](https://docs.baselayer.com/docs/web-presence-api.md) — running online presence independently of KYB
* [Response Reference](https://docs.baselayer.com/docs/online-presence-response-reference.md) — full field definitions and path-specific response shapes


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.