FFXIV Market Board Prices Scraper avatar

FFXIV Market Board Prices Scraper

Pricing

from $3.68 / 1,000 item extracteds

Go to Apify Store
FFXIV Market Board Prices Scraper

FFXIV Market Board Prices Scraper

Fetch Universalis FFXIV price summaries, current listings, and recent sales by item and world, data center, or region.

Pricing

from $3.68 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Fetch FFXIV market board prices from the public Universalis API and turn them into analysis-ready records. Give the Actor one or more Final Fantasy XIV item IDs and a world, data center, or region. It returns one record per item with current price statistics, detailed listings, recent completed sales, quality splits, and sale velocity.

Use it for crafting-cost sheets, shopping decisions, trading research, scheduled market snapshots, and downstream data pipelines. No Square Enix login, browser, or proxy is required.

What this Actor does

The Actor queries Universalis for the market scope you choose:

  • one world, such as Seraph;
  • one data center, such as Aether;
  • one region, such as North-America or Europe.

For every resolved item ID, it saves a single dataset row. That row combines a compact price summary with configurable arrays of current listings and recent sale history. This structure makes recurring snapshots easy to compare while preserving seller, buyer, world, quantity, quality, and timestamp detail.

Who is it for?

  • Crafters comparing material costs before choosing a recipe or server.
  • Traders checking current spreads, recent sale prices, and velocity.
  • Free Company analysts maintaining shared procurement sheets.
  • Dashboard builders feeding FFXIV market data into a database or BI tool.
  • Automation developers scheduling repeatable item watchlists through the Apify API.
  • Researchers comparing item pricing across worlds, data centers, or regions.

Why use this Actor

  • Uses the public Universalis v2 JSON API directly.
  • Accepts up to 100 item IDs in one run.
  • Supports world, data-center, and region scopes with the same input.
  • Returns current listings and recent completed sales together.
  • Exposes normal-quality and high-quality statistics separately.
  • Produces JSON, CSV, Excel, XML, RSS, and other Apify dataset exports.
  • Uses bounded retries for temporary network, rate-limit, and upstream-server failures.
  • Charges per resolved FFXIV item, not per nested listing or sale.

Universalis data is community supplied. The Actor reports source timestamps so you can judge freshness instead of treating every value as live exchange data.

Input

FieldTypeDefaultDescription
itemIdsinteger arrayrequiredMarketable FFXIV item IDs. Maximum 100.
locationstringNorth-AmericaExact Universalis world, data center, or region name.
listingsLimitinteger10Current listings included per item, from 0 to 100.
historyLimitinteger10Recent completed sales included per item, from 0 to 100.
highQualityOnlybooleanfalseRequest only HQ market data where quality applies.
maxItemsinteger10Hard cap on item IDs checked and saved, from 1 to 100.

At least one of listingsLimit or historyLimit must be greater than zero. Duplicate item IDs are checked only once. Invalid locations, non-positive IDs, and unsupported limits fail with a clear error rather than returning misleading empty data.

Finding item IDs and location names

Universalis and common FFXIV data tools expose numeric item IDs in item pages or API records. For example, item ID 5333 is Grade 3 Thanalan Topsoil. Use marketable IDs; currencies, quests, and other non-market entities do not have market-board data.

Location values are case-sensitive source names in normal use. Typical values include:

  • Seraph, Jenova, or another individual world;
  • Aether, Primal, Chaos, or another data center;
  • North-America, Europe, Japan, or Oceania.

A world returns that world's market. A data center or region may contain listings and sales from multiple worlds, with worldName retained on each nested row.

Getting started

  1. Open the Actor input page.
  2. Enter one or more numeric FFXIV item IDs.
  3. Choose a world, data center, or region in location.
  4. Set how many current listings and recent sales to include.
  5. Set maxItems to your desired watchlist size.
  6. Click Start.
  7. Open the default dataset to inspect or export the item records.

A useful first run is:

{
"itemIds": [5333, 2],
"location": "North-America",
"listingsLimit": 10,
"historyLimit": 10,
"maxItems": 2
}

Output fields

FieldMeaning
itemIdStable numeric FFXIV item ID.
requestedLocationWorld, data center, or region supplied in the input.
worldId, worldNamePopulated for a world-scoped response; otherwise null.
dataCenter, regionSource market scope when Universalis supplies it.
currentAveragePriceAverage active listing price across qualities.
currentAveragePriceNq, currentAveragePriceHqNQ and HQ active-listing averages.
minPrice, minPriceNq, minPriceHqLowest current prices.
maxPriceHighest current listing price in the source summary.
averageSalePriceAverage completed-sale price in source statistics.
regularSaleVelocityEstimated daily sales across qualities.
nqSaleVelocity, hqSaleVelocityNQ and HQ daily velocity estimates.
listingCountNumber of normalized listing objects included.
recentSaleCountNumber of normalized completed-sale objects included.
listingsCurrent price, quantity, total, quality, world, retainer, creator, and review time.
recentSalesCompleted-sale price, quantity, quality, world, buyer, and sale time.
lastUploadedAtLast market upload time reported by Universalis, when available.
sourceUrlExact public Universalis API request used.
retrievedAtTime this Actor retrieved the data.

Nullable summary fields remain null when Universalis does not report that statistic. Nested malformed rows are excluded rather than emitted with invalid price or quantity values.

Example output

This abbreviated record reflects the Actor's current output shape:

{
"itemId": 5333,
"requestedLocation": "North-America",
"worldId": null,
"worldName": null,
"dataCenter": null,
"region": "North-America",
"currentAveragePrice": 546.21,
"currentAveragePriceNq": 487.35,
"currentAveragePriceHq": 605.08,
"minPrice": 1,
"averageSalePrice": 520.12,
"regularSaleVelocity": 384.4,
"listingCount": 10,
"recentSaleCount": 10,
"listings": [
{
"listingId": "2814750591605663",
"pricePerUnit": 1,
"quantity": 19,
"total": 19,
"highQuality": false,
"worldName": "Jenova",
"retainerName": "Leashie",
"lastReviewedAt": "2026-09-15T19:05:58.000Z"
}
],
"recentSales": [
{
"pricePerUnit": 9,
"quantity": 1,
"total": 9,
"highQuality": false,
"worldName": "Siren",
"soldAt": "2026-09-15T20:28:23.000Z"
}
],
"lastUploadedAt": "2026-09-15T20:30:00.000Z",
"retrievedAt": "2026-09-15T20:31:00.000Z"
}

Prices and names above are illustrative of a real response shape and naturally change as players trade.

How much does it cost to check FFXIV market board items?

The Actor uses pay-per-event pricing:

  • a one-time $0.005 start fee per run;
  • one item event for each resolved FFXIV item saved.

On the BRONZE tier, each item costs $0.006132. Current listings and recent sales nested under that item have no separate charge. Unresolved item IDs do not produce or charge an item event.

Resolved itemsCalculationTotal
11 × $0.006132 + $0.005 start0.011132 USD
1010 × $0.006132 + $0.005 start0.066320 USD
2525 × $0.006132 + $0.005 start0.158300 USD
100100 × $0.006132 + $0.005 start0.618200 USD

Your effective event tier depends on your Apify plan. Platform compute is included in pay-per-event billing; check the live pricing panel for your applicable tier before a large run.

Scheduled price monitoring

Create one Task per watchlist and schedule it hourly, daily, or weekly. Keep the same item IDs and location so each dataset is a comparable timestamped snapshot. Useful workflows include:

  1. compare minPrice against the prior run;
  2. track averageSalePrice and regularSaleVelocity over time;
  3. alert when a crafting material crosses a target price;
  4. load records into a spreadsheet or warehouse;
  5. retain lastUploadedAt to filter stale source observations.

The Actor does not send alerts or compare prior runs itself. Use an Apify webhook, Make, Zapier, n8n, or your own integration for those actions.

Spreadsheet and data-pipeline integration

Every run writes to the default Apify dataset. You can download the overview as JSON, CSV, Excel, XML, or RSS. For tabular tools, top-level summary fields map directly to columns. Nested listings and recentSales remain JSON arrays; flatten them in your ETL step when you need one row per listing or sale.

For a warehouse workflow:

  • use itemId plus retrievedAt as snapshot identity;
  • keep requestedLocation as a partition or dimension;
  • unpack nested arrays into child tables;
  • preserve sourceUrl and lastUploadedAt for lineage and freshness checks.

Use from the Apify API with cURL

Replace YOUR_APIFY_TOKEN with your Apify API token:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~ffxiv-market-board-prices-listings/runs?token=YOUR_APIFY_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{"itemIds":[5333,2],"location":"Aether","listingsLimit":20,"historyLimit":20,"maxItems":2}'

Read the resulting default dataset using the defaultDatasetId returned by the run. For production code, send tokens in an authorization header rather than logging tokenized URLs.

Use from JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/ffxiv-market-board-prices-listings').call({
itemIds: [5333, 2, 3],
location: 'Aether',
listingsLimit: 20,
historyLimit: 20,
maxItems: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use from Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/ffxiv-market-board-prices-listings').call(run_input={
'itemIds': [5333],
'location': 'Seraph',
'listingsLimit': 25,
'historyLimit': 10,
'maxItems': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI agents

Add the Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/ffxiv-market-board-prices-listings"

Claude Desktop, Cursor, and VS Code can use this equivalent MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/ffxiv-market-board-prices-listings"
}
}
}

Example prompts:

  • “Check item 5333 on Seraph and summarize the cheapest current listings.”
  • “Fetch items 5333, 2, and 3 across Aether with 20 recent sales each.”
  • “Create a North America crafting-price snapshot and format the item summaries as a table.”

Reliability and failure behavior

The Actor sends one bounded public-API request for the selected item batch. It retries network timeouts, HTTP 429, and temporary HTTP 5xx failures up to three total attempts using backoff and jitter. It does not retry stable client errors or malformed responses.

A run fails clearly when:

  • itemIds is missing or invalid;
  • both detail limits are zero;
  • the location contains URL path characters;
  • Universalis resolves none of the requested item IDs;
  • the API remains unavailable after bounded retries;
  • the source returns non-JSON or an invalid payload.

If only some IDs are unresolved, valid items are still saved and the unresolved IDs are logged.

Limits and data freshness

  • Maximum 100 requested item IDs per run.
  • Maximum 100 current listings and 100 recent sales inside each item record.
  • maxItems applies in the order item IDs are supplied.
  • Universalis relies on community uploads from FFXIV clients.
  • Sparse items and low-activity worlds may have no current listings or recent sales.
  • Retainer, creator, and buyer names appear only when the public source exposes them.
  • This Actor does not resolve item names, calculate crafting recipes, predict prices, or execute in-game trades.
  • It does not maintain state between runs or generate alerts by itself.

Responsible use and legality

This Actor accesses public Universalis API data without logging into Final Fantasy XIV. Use it in accordance with Universalis, Apify, and applicable Square Enix terms and policies. Do not use public player or retainer names for harassment, profiling, or attempts to identify people outside the game. Respect reasonable schedules and avoid using repeated runs to create unnecessary source load.

Final Fantasy XIV and related names are trademarks of Square Enix Holdings Co., Ltd. This independent Actor is not affiliated with or endorsed by Square Enix or Universalis.

AI use, data handling, and retention

This Actor does not use AI models or send input or output to an AI provider. It sends only the requested item IDs, location, and listing/history limits to the public Universalis API.

Output can include public in-game retainer, creator, and buyer names exposed by Universalis. The Actor keeps no external cache or separate copy. Run input, datasets, and logs remain in Apify storage according to your account retention settings, and you can delete them with Apify storage controls. Logs contain operational status and source request details, not Apify tokens or other credentials.

FAQ and troubleshooting

Why did my run say the item was unresolved?

The numeric ID may not be marketable, may be mistyped, or may not exist in the selected market scope. Verify the item ID with Universalis or an FFXIV data tool and retry with a known world or data center.

Why are listings or sales empty?

The item may have no recent activity in that scope, the requested HQ filter may exclude available records, or community data may be stale. Try a broader data center or region and inspect lastUploadedAt.

Why does a region record contain several world names?

Region and data-center queries aggregate participating worlds. Each nested listing and sale preserves its worldName, allowing you to compare the component markets.

Can I enter item names instead of IDs?

Not in this version. Numeric IDs avoid ambiguous language and naming matches and map directly to the Universalis endpoint.

Does maxItems limit nested listings and sales?

No. It limits item records. Use listingsLimit and historyLimit to control nested detail per item.

Support

If a valid marketable item fails unexpectedly, include the item IDs, location, detail limits, and run URL in your Apify issue report. Do not include an Apify token or other credentials. Source outages and community-data gaps can be diagnosed more quickly when the exact scope and timestamp are available.