# Universalis

> Check Final Fantasy XIV market board prices from Universalis, the crowdsourced market data site: current listings and sales on any world, data center or region, sale history and price trends, the cheapest world to buy on, price alerts, and market tax rates. Look items up by name. No account or API key is required.

App · 11 actions. Web page: https://docs.lodol.com/docs/integrations/universalis

## Actions

### Check for listings under a price

Check whether anyone is selling an item at or below the price you want to pay, for a price alert: says yes or no, how many listings and units match, and lists the cheapest of them.

**Inputs**

- Item (`item`, text, required): The item's name as the game shows it, such as Iron Ingot, or its item ID. Capitals don't matter.
- World, data center or region (`location`, text, required): Where to look: one world, every world in a data center, or a whole region.
- Price (`max_price`, number, required): The most you would pay per unit, in gil. From 0 to 999999999.
- Quality (`quality`, text): Count every listing, or only normal or high-quality ones. One of: `any` (Any quality), `nq` (Normal quality (NQ) only), `hq` (High quality (HQ) only). Default: `any`.
- Minimum quantity (`min_quantity`, number): Only count listings with at least this many units in the stack. From 1 to 999999. Default: `1`.

**Outputs**

- `is_below` (true/false)
- `item_id` (number)
- `item_name` (text)
- `listings` (list)
- `location` (text)
- `location_type` (text)
- `lowest_price` (number)
- `lowest_price_retainer` (text)
- `lowest_price_world` (text)
- `matching_listing_count` (number)
- `matching_units` (number)
- `max_price` (number)
- `quality` (text)
- `updated_at` (text)
- `url` (text)

**Example output**

```json
{
  "is_below": true,
  "item_id": 5057,
  "item_name": "Iron Ingot",
  "listings": [
    {
      "crafted": false,
      "crafter_name": null,
      "hq": false,
      "materia_count": 0,
      "on_mannequin": false,
      "price_per_unit": 48,
      "quantity": 19,
      "retainer_city": "Limsa Lominsa",
      "retainer_name": "Umii",
      "reviewed_at": "2026-10-15T07:17:01Z",
      "tax": 45,
      "total": 912,
      "total_with_tax": 957,
      "world": "Faerie"
    }
  ],
  "location": "Aether",
  "location_type": "data_center",
  "lowest_price": 48,
  "lowest_price_retainer": "Umii",
  "lowest_price_world": "Faerie",
  "matching_listing_count": 1,
  "matching_units": 19,
  "max_price": 60,
  "quality": "any",
  "updated_at": "2026-10-15T17:51:26Z",
  "url": "https://universalis.app/market/5057"
}
```

### Compare prices of several items

Get a price summary for up to 100 items at once: each one's lowest price and where, average sale price, daily sales and last sale, and for a world, the lowest prices across its data center and region too.

**Inputs**

- Items (`items`, list, required): Up to 100 item names or IDs: a list, or text with one item per line or separated by commas.
- World, data center or region (`location`, text, required): Where to look: one world, every world in a data center, or a whole region.
- Quality (`quality`, text): Count every listing, or only normal or high-quality ones. One of: `any` (Any quality), `nq` (Normal quality (NQ) only), `hq` (High quality (HQ) only). Default: `any`.

**Outputs**

- `item_count` (number)
- `items` (list)
- `location` (text)
- `location_type` (text)
- `not_on_market` (list)
- `quality` (text)

**Example output**

```json
{
  "item_count": 1,
  "items": [
    {
      "average_sale_price": 226,
      "daily_units_sold": 41,
      "data_center_lowest_price": 48,
      "data_center_lowest_price_world": "Faerie",
      "item_id": 5057,
      "item_name": "Iron Ingot",
      "last_sale_at": "2026-10-15T00:51:32Z",
      "last_sale_price": 298,
      "last_sale_world": "Gilgamesh",
      "lowest_price": 300,
      "lowest_price_world": "Gilgamesh",
      "region_lowest_price": 20,
      "region_lowest_price_world": "Hyperion",
      "url": "https://universalis.app/market/5057"
    }
  ],
  "location": "Gilgamesh",
  "location_type": "world",
  "not_on_market": [],
  "quality": "any"
}
```

### Find items by name

Find items you can buy or sell on the market board by all or part of their name: each one's ID, category, item level, icon and Universalis page. The closest match comes first.

**Inputs**

- Name contains (`query`, text, required): All or part of the item's name, such as Tincture or Ingot. Every word must appear in the name.
- Limit (`limit`, number): How many items to return, up to 100. From 1 to 100. Default: `20`.

**Outputs**

- `item_count` (number)
- `items` (list)
- `more_available` (true/false)
- `query` (text)

**Example output**

```json
{
  "item_count": 1,
  "items": [
    {
      "category": "Metal",
      "icon_url": "https://v2.xivapi.com/api/asset?path=ui/icon/020000/020801_hr1.tex&format=png",
      "item_id": 5057,
      "item_level": 14,
      "name": "Iron Ingot",
      "url": "https://universalis.app/market/5057"
    }
  ],
  "more_available": false,
  "query": "Iron Ingot"
}
```

### Find the cheapest world to buy on

Compare every world in a data center or region for one item, cheapest first: each world's lowest price, listings and units for sale, and what buying a quantity would cost there, tax included, taking the cheapest listings first.

**Inputs**

- Item (`item`, text, required): The item's name as the game shows it, such as Iron Ingot, or its item ID. Capitals don't matter.
- Data center or region (`area`, text, required): The data center or region whose worlds to compare.
- Quality (`quality`, text): Count every listing, or only normal or high-quality ones. One of: `any` (Any quality), `nq` (Normal quality (NQ) only), `hq` (High quality (HQ) only). Default: `any`.
- Quantity needed (`quantity`, number): How many you want to buy. Worlds are ranked by what that many would cost; listings are bought as whole stacks. From 1 to 999999. Default: `1`.

**Outputs**

- `cheapest_cost_for_quantity` (number)
- `cheapest_data_center` (text)
- `cheapest_price` (number)
- `cheapest_world` (text)
- `item_id` (number)
- `item_name` (text)
- `location` (text)
- `location_type` (text)
- `quality` (text)
- `quantity` (number)
- `url` (text)
- `worlds` (list)
- `worlds_with_listings` (number)

**Example output**

```json
{
  "cheapest_cost_for_quantity": 4305,
  "cheapest_data_center": "Crystal",
  "cheapest_price": 50,
  "cheapest_world": "Brynhildr",
  "item_id": 5057,
  "item_name": "Iron Ingot",
  "location": "North America",
  "location_type": "region",
  "quality": "any",
  "quantity": 50,
  "url": "https://universalis.app/market/5057",
  "worlds": [
    {
      "cost_for_quantity": 4305,
      "data_center": "Crystal",
      "enough_stock": true,
      "listing_count": 17,
      "lowest_price": 50,
      "units_bought": 83,
      "units_for_sale": 776,
      "updated_at": "2026-10-15T01:59:28Z",
      "world": "Brynhildr"
    }
  ],
  "worlds_with_listings": 29
}
```

### Get market board prices

Get what an item costs on the market board right now: the cheapest listings with their world and retainer, the newest sales, and a summary of the lowest NQ and HQ prices, units for sale, average sale price and how many sell a day.

**Inputs**

- Item (`item`, text, required): The item's name as the game shows it, such as Iron Ingot, or its item ID. Capitals don't matter.
- World, data center or region (`location`, text, required): Where to look: one world, every world in a data center, or a whole region.
- Quality (`quality`, text): Count every listing, or only normal or high-quality ones. One of: `any` (Any quality), `nq` (Normal quality (NQ) only), `hq` (High quality (HQ) only). Default: `any`.
- Listings to show (`listing_limit`, number): How many of the cheapest listings to list, up to 100. The summary always counts every listing. From 0 to 100. Default: `10`.
- Sales to show (`sale_limit`, number): How many of the newest sales to list, up to 100. From 0 to 100. Default: `10`.

**Outputs**

- `average_listing_price` (number)
- `average_sale_price` (number)
- `daily_units_sold` (number)
- `item_id` (number)
- `item_name` (text)
- `last_sale_at` (text)
- `last_sale_price` (number)
- `listing_count` (number)
- `listings` (list)
- `location` (text)
- `location_type` (text)
- `lowest_price` (number)
- `lowest_price_hq` (number)
- `lowest_price_nq` (number)
- `lowest_price_world` (text)
- `quality` (text)
- `sales` (list)
- `units_for_sale` (number)
- `updated_at` (text)
- `url` (text)

**Example output**

```json
{
  "average_listing_price": 412,
  "average_sale_price": 218,
  "daily_units_sold": 267.2,
  "item_id": 5057,
  "item_name": "Iron Ingot",
  "last_sale_at": "2026-10-15T05:34:01Z",
  "last_sale_price": 300,
  "listing_count": 96,
  "listings": [
    {
      "crafted": false,
      "crafter_name": null,
      "hq": false,
      "materia_count": 0,
      "on_mannequin": false,
      "price_per_unit": 48,
      "quantity": 19,
      "retainer_city": "Limsa Lominsa",
      "retainer_name": "Umii",
      "reviewed_at": "2026-10-15T07:17:01Z",
      "tax": 45,
      "total": 912,
      "total_with_tax": 957,
      "world": "Faerie"
    }
  ],
  "location": "Aether",
  "location_type": "data_center",
  "lowest_price": 48,
  "lowest_price_hq": 59,
  "lowest_price_nq": 48,
  "lowest_price_world": "Faerie",
  "quality": "any",
  "sales": [
    {
      "buyer_name": "Shijo Katsurou",
      "hq": false,
      "on_mannequin": false,
      "price_per_unit": 300,
      "quantity": 99,
      "sold_at": "2026-10-15T05:34:01Z",
      "total": 29700,
      "world": "Siren"
    }
  ],
  "units_for_sale": 3051,
  "updated_at": "2026-10-15T17:51:26Z",
  "url": "https://universalis.app/market/5057"
}
```

### Get market tax rates

Get the market tax each city charges on a world this week, and which cities are cheapest to sell from.

**Inputs**

- World (`world`, text, required): The world whose tax rates to get.

**Outputs**

- `data_center` (text)
- `lowest_rate_cities` (list)
- `lowest_rate_percent` (number)
- `rates` (list)
- `world` (text)

**Example output**

```json
{
  "data_center": "Aether",
  "lowest_rate_cities": [
    "Kugane"
  ],
  "lowest_rate_percent": 3,
  "rates": [
    {
      "city": "Limsa Lominsa",
      "rate_percent": 5
    },
    {
      "city": "Kugane",
      "rate_percent": 3
    }
  ],
  "world": "Gilgamesh"
}
```

### Get price trend

See how an item's sale price moved day by day: each day's sales, units sold and average, lowest and highest price, and whether the price is rising, falling or steady, comparing the first half of the period with the second.

**Inputs**

- Item (`item`, text, required): The item's name as the game shows it, such as Iron Ingot, or its item ID. Capitals don't matter.
- World, data center or region (`location`, text, required): Where to look: one world, every world in a data center, or a whole region.
- Days (`days`, number): How many days back to look, up to 90. From 1 to 90. Default: `14`.
- Quality (`quality`, text): Count every listing, or only normal or high-quality ones. One of: `any` (Any quality), `nq` (Normal quality (NQ) only), `hq` (High quality (HQ) only). Default: `any`.

**Outputs**

- `average_price` (number)
- `change_percent` (number)
- `daily` (list)
- `days` (number)
- `earlier_average_price` (number)
- `item_id` (number)
- `item_name` (text)
- `location` (text)
- `location_type` (text)
- `quality` (text)
- `recent_average_price` (number)
- `sale_count` (number)
- `trend` (text)
- `units_sold` (number)
- `url` (text)

**Example output**

```json
{
  "average_price": 250,
  "change_percent": 2,
  "daily": [
    {
      "average_price": 273,
      "date": "2026-10-15",
      "highest_price": 498,
      "lowest_price": 50,
      "sale_count": 11,
      "units_sold": 369
    }
  ],
  "days": 14,
  "earlier_average_price": 249,
  "item_id": 5057,
  "item_name": "Iron Ingot",
  "location": "Aether",
  "location_type": "data_center",
  "quality": "any",
  "recent_average_price": 254,
  "sale_count": 303,
  "trend": "steady",
  "units_sold": 4496,
  "url": "https://universalis.app/market/5057"
}
```

### Get sale history

Get the sales of an item over the last few days, newest first, with who bought how many at what price, and totals: units sold, gil traded, and the average, median, lowest and highest price.

**Inputs**

- Item (`item`, text, required): The item's name as the game shows it, such as Iron Ingot, or its item ID. Capitals don't matter.
- World, data center or region (`location`, text, required): Where to look: one world, every world in a data center, or a whole region.
- Days (`days`, number): How many days back to look, up to 90. From 1 to 90. Default: `7`.
- Quality (`quality`, text): Count every listing, or only normal or high-quality ones. One of: `any` (Any quality), `nq` (Normal quality (NQ) only), `hq` (High quality (HQ) only). Default: `any`.
- Lowest price (`min_price`, number): Only sales at this many gil per unit or more. Leave empty for no minimum. From 0 to 999999999.
- Highest price (`max_price`, number): Only sales at this many gil per unit or less. Leave empty for no maximum. From 0 to 999999999.
- Sales to show (`limit`, number): How many sales to list, up to 1000. The totals always count every sale. From 0 to 1000. Default: `100`.

**Outputs**

- `average_price` (number)
- `daily_units_sold` (number)
- `days` (number)
- `gil_traded` (number)
- `highest_price` (number)
- `item_id` (number)
- `item_name` (text)
- `last_sale_at` (text)
- `location` (text)
- `location_type` (text)
- `lowest_price` (number)
- `median_price` (number)
- `quality` (text)
- `sale_count` (number)
- `sales` (list)
- `units_sold` (number)
- `url` (text)

**Example output**

```json
{
  "average_price": 266,
  "daily_units_sold": 127.6,
  "days": 7,
  "gil_traded": 237726,
  "highest_price": 3469,
  "item_id": 5057,
  "item_name": "Iron Ingot",
  "last_sale_at": "2026-10-15T05:34:01Z",
  "location": "Aether",
  "location_type": "data_center",
  "lowest_price": 50,
  "median_price": 300,
  "quality": "any",
  "sale_count": 53,
  "sales": [
    {
      "buyer_name": "Shijo Katsurou",
      "hq": false,
      "on_mannequin": false,
      "price_per_unit": 300,
      "quantity": 99,
      "sold_at": "2026-10-15T05:34:01Z",
      "total": 29700,
      "world": "Siren"
    }
  ],
  "units_sold": 893,
  "url": "https://universalis.app/market/5057"
}
```

### List items with outdated prices

List the items whose market board prices have gone longest without an update on a world or data center, oldest first: what to check in game next.

**Inputs**

- World or data center (`location`, text, required): The world or data center to check.
- Limit (`limit`, number): How many items to list, up to 200. From 1 to 200. Default: `20`.

**Outputs**

- `item_count` (number)
- `items` (list)
- `location` (text)
- `location_type` (text)

**Example output**

```json
{
  "item_count": 1,
  "items": [
    {
      "item_id": 24580,
      "item_name": "Raw Tavern Furnishing Materials",
      "updated_at": "2025-04-13T11:40:45Z",
      "url": "https://universalis.app/market/24580",
      "world": "Jenova"
    }
  ],
  "location": "Aether",
  "location_type": "data_center"
}
```

### List recently updated items

List the items whose market board prices players uploaded most recently on a world or data center, newest first, with their names: a feed of what is being traded right now.

**Inputs**

- World or data center (`location`, text, required): The world or data center to watch.
- Limit (`limit`, number): How many items to list, up to 200. From 1 to 200. Default: `20`.

**Outputs**

- `item_count` (number)
- `items` (list)
- `location` (text)
- `location_type` (text)

**Example output**

```json
{
  "item_count": 1,
  "items": [
    {
      "item_id": 36242,
      "item_name": "Gaja Hide",
      "updated_at": "2026-10-15T18:09:36Z",
      "url": "https://universalis.app/market/36242",
      "world": "Gilgamesh"
    }
  ],
  "location": "Gilgamesh",
  "location_type": "world"
}
```

### List worlds and data centers

List the game's worlds with their data center and region, and each data center with its worlds. Narrow it to one region if you like.

**Inputs**

- Region (`region`, text): Only this region. Leave empty for every region.

**Outputs**

- `data_center_count` (number)
- `data_centers` (list)
- `region` (text)
- `world_count` (number)
- `worlds` (list)

**Example output**

```json
{
  "data_center_count": 1,
  "data_centers": [
    {
      "name": "Light",
      "region": "Europe",
      "world_count": 1,
      "worlds": [
        "Alpha"
      ]
    }
  ],
  "region": "Europe",
  "world_count": 1,
  "worlds": [
    {
      "data_center": "Light",
      "name": "Alpha",
      "region": "Europe",
      "world_id": 402
    }
  ]
}
```
