# Ulta Beauty API: Search products

> Searches Ulta Beauty products by keyword, brand, USD price range and sort order, and returns each product with its starting prices.

Unofficial. Not affiliated with or endorsed by Ulta Beauty.

- Page: https://fous.com/methods/ulta.com/search-products
- Method: `ulta.com/search_products`, version 1
- Website: ulta.com
- Returns: product name, brand, starting price, sale price, rating, review count, image, product link, product id, sku
- Effect: read (it gets data and changes nothing)
- Sign-in: none needed
- Cost: 1 credit per completed run (1¢ with pay as you go); failed runs are free
- Verified: Nov 2, 2026

## Inputs

| Field | Type | Required | In the run below | Description |
|---|---|---|---|---|
| `sort` | string | no | `"top_rated"` | Product order, for example best_sellers. One of "best_match", "best_sellers", "top_rated", "newest", "price_low_to_high", "price_high_to_low". Default "best_match". |
| `brand` | string | no |  | Brand name to filter by, for example Batiste. |
| `query` | string | yes | `"mascara"` | Product search words, for example dry shampoo. |
| `max_price` | number | no |  | Maximum price in USD, for example 20. |
| `min_price` | number | no |  | Minimum price in USD, for example 10. |
| `max_results` | integer | no | `70` | Maximum products to return, for example 24 (up to 96). Default 24. |

## Output

From a run on Oct 23, 2026, shortened. Its input:

```json
{
  "sort": "top_rated",
  "query": "mascara",
  "max_results": 70
}
```

Its output:

```json
{
  "products": [
    {
      "sku": "77010530",
      "brand": "Izzy Zero Waste Beauty",
      "price": 55,
      "currency": "USD",
      "image_link": "https://media.ultainc.com/i/ulta/77010530",
      "sale_price": null,
      "star_rating": 5,
      "product_link": "https://www.ulta.com/p/izzys-best-seller-duo-mkt77006751?sku=77010530",
      "product_name": "Izzy's Best Seller Duo",
      "review_count": 5,
      "price_as_shown": null,
      "ulta_product_id": "mkt77006751"
    },
    {
      "sku": "77010550",
      "brand": "Izzy Zero Waste Beauty",
      "price": 27.95,
      "currency": "USD",
      "image_link": "https://media.ultainc.com/i/ulta/77010550",
      "sale_price": null,
      "star_rating": 5,
      "product_link": "https://www.ulta.com/p/izzy-zero-waste-mascara-mkt77006763?sku=77010550",
      "product_name": "Izzy Zero Waste Mascara",
      "review_count": 16,
      "price_as_shown": null,
      "ulta_product_id": "mkt77006763"
    },
    {
      "sku": "77010566",
      "brand": "Izzy Zero Waste Beauty",
      "price": 55,
      "currency": "USD",
      "image_link": "https://media.ultainc.com/i/ulta/77010566",
      "sale_price": null,
      "star_rating": 5,
      "product_link": "https://www.ulta.com/p/izzys-zero-waste-beauty-essentials-mkt77006778?sku=77010566",
      "product_name": "Izzy's Zero Waste Beauty Essentials",
      "review_count": 1,
      "price_as_shown": null,
      "ulta_product_id": "mkt77006778"
    }
  ]
}
```

## Run it

From code, with a Fous API key in `FOUS_API_KEY`; the answer's `data` holds the output:

```bash
curl https://api.fous.com/v1/runs \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"method":"ulta.com/search_products","input":{"sort":"top_rated","query":"mascara","max_results":70}}'
```

From an AI agent connected to the Fous MCP server: its `run` with the same method and input. To connect one, give it `set up https://fous.com/SKILL.md`.

## Ask your agent

- Find me the best selling dry shampoo under $15 with the lowest prices first
- Show top rated Batiste products, maximum 10 results
- I need a lipstick between $10 and $30 sorted from highest price to lowest
- Look up newest foundation products from any brand, return 40 results
- What hair serums cost between $5 and $25 on ulta.com, best match order

## Input schema

```json
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "sort": {
      "enum": [
        "best_match",
        "best_sellers",
        "top_rated",
        "newest",
        "price_low_to_high",
        "price_high_to_low"
      ],
      "type": "string",
      "default": "best_match",
      "description": "Product order, for example best_sellers."
    },
    "brand": {
      "type": "string",
      "description": "Brand name to filter by, for example Batiste."
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Product search words, for example dry shampoo."
    },
    "max_price": {
      "type": "number",
      "minimum": 0,
      "description": "Maximum price in USD, for example 20."
    },
    "min_price": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum price in USD, for example 10."
    },
    "max_results": {
      "type": "integer",
      "default": 24,
      "maximum": 96,
      "minimum": 1,
      "description": "Maximum products to return, for example 24 (up to 96).",
      "x-fous-developer": true
    }
  }
}
```

## Output schema

```json
{
  "type": "object",
  "required": [
    "products"
  ],
  "properties": {
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "product_name",
          "brand",
          "price",
          "currency",
          "sale_price",
          "price_as_shown",
          "star_rating",
          "review_count",
          "image_link",
          "product_link",
          "ulta_product_id",
          "sku"
        ],
        "properties": {
          "sku": {
            "type": [
              "string",
              "null"
            ],
            "x-fous-developer": true
          },
          "brand": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Starting regular price in USD."
          },
          "currency": {
            "type": "string"
          },
          "image_link": {
            "type": [
              "string",
              "null"
            ]
          },
          "sale_price": {
            "type": [
              "number",
              "null"
            ],
            "description": "Starting sale price in USD, if on sale."
          },
          "star_rating": {
            "type": [
              "number",
              "null"
            ]
          },
          "product_link": {
            "type": "string"
          },
          "product_name": {
            "type": "string"
          },
          "review_count": {
            "type": [
              "integer",
              "null"
            ]
          },
          "price_as_shown": {
            "type": [
              "string",
              "null"
            ],
            "description": "Displayed price range, when the product has multiple prices."
          },
          "ulta_product_id": {
            "type": [
              "string",
              "null"
            ],
            "x-fous-developer": true
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
```

## See more

- [Ulta Beauty API: Get product](https://fous.com/methods/ulta.com/get-product.md): Looks up one Ulta Beauty product by name or product link and returns its details, prices, sizes or shades, ingredients, directions, ratings and images. Prices and availability may change.
- [Sephora API: Search products](https://fous.com/methods/sephora.com/search-products.md): Searches Sephora US beauty products in Sephora's order, with brand and USD price filters and shopper sort options. Loves counts are null when a product page cannot be loaded.
- [Nordstrom API: Search products](https://fous.com/methods/nordstrom.com/search-products.md): Search Nordstrom products by words, price, sale status and sort order. Prices are the lowest listed price. Available sizes may be empty when a product page is unavailable.
- [Macy's API: Search products](https://fous.com/methods/macys.com/search-products.md): Searches Macy's products in the site's order with optional USD price bounds, sale-only results and sorting. Prices for products with a range use the lowest shown price.
- [AliExpress API: Search products](https://fous.com/methods/aliexpress.com/search-products.md): Searches AliExpress listings by product words, shipping destination, price range and sort order. Unpriced promotional cards are omitted; free shipping is marked only when the listing explicitly says so.
- [Chewy API: Search products](https://fous.com/methods/chewy.com/search-products.md): Search Chewy products by words, pet type, and sort order. Returns up to 72 products in Chewy's order, including listed and first-order Autoship prices when shown.
- [Sephora API: Get product reviews](https://fous.com/methods/sephora.com/get-product-reviews.md): Finds a Sephora US product by name or Sephora link and returns its review summary and customer reviews, sorted and optionally filtered by skin type.
- [Best Buy API: Search products](https://fous.com/methods/bestbuy.com/search-products.md): Searches Best Buy US products with an optional price range, sort order and page. Prices and availability come from public listings and may vary by location.
- [All Ulta Beauty methods](https://fous.com/methods/ulta.com.md)
