Kansoku
English日本語简体中文

Price research, worldwide

Not the going rate.
The actual price, at the actual seller.

Kansoku tells you what a named company is charging for a product right now, in each country — with the seller, the listing URL, the moment it was read and the exchange rate behind every figure. Requests are routed through servers in the country you name, because a page shows a different price depending on where it is opened from.

Read the case studySee what we collect

  • Requests leave from an address in the country you name
  • No consumer bandwidth, ever
  • robots.txt honoured in code, not in prose
Who is selling it, and for how much

Example — one monitored product, read from three countries

Named seller, listed price, gap against your own

  • JPRetailer A — Tokyo¥12,800your price
  • USRetailer B — New York¥14,600+14.1%
  • DERetailer C — Berlin¥11,900−7.0%
Checks before publication31 / 31 passed
Behind this figureseller · listing URL · retrieved_at · FX rate + its publication date

The five reasons

An assistant is not withholding this. It cannot reach it.

Each of these is a property of how assistants work, not a gap that a better prompt closes.

  1. 01

    It answers with a rate, not a seller

    Ask what something costs and you get a number that stands for a market. You cannot act on that. Buying, pricing and export decisions need which company, at what price, on which page — and that is a different question from the one an assistant answers.

  2. 02

    It sees only your country

    A page serves a different price, a different currency and a different availability depending on where the request comes from. An assistant asked from Tokyo returns the Tokyo view. There is no prompt that makes it look from São Paulo.

  3. 03

    It does not say where the number came from

    In our own test, both figures an assistant gave were correct — one was a trade-in price, the other a market index. Nothing in the answer distinguished them, and the difference reversed the sign.

  4. 04

    It has no yesterday

    Nobody stores what a page showed yesterday, so no model can recall it. What moved since yesterday cannot be bought later — it exists only if something was recording.

  5. 05

    It answers differently each time

    The same question does not return the same answer twice. That is acceptable for a summary and unusable for a series you intend to compare month over month.

None of this is a criticism of assistants. It is a description of what they are for. Reading a specific page, from a specific country, at a specific moment, and keeping the record is a different job.

Two surfaces, one platform

One reads pages for you. The other hands you the browser.

Most work needs only the first. The second exists for the pages the first cannot reach.

Web Data API

POST /v1/extract

A URL and a shape in, structured data out.

You describe what you want off the page. We fetch it from an address in the country you named, run the extraction tiers cheapest-first, and return typed data with the record of how it was obtained.

  • Three tiers — css, structured_data, llm — and the paid one is opt-in
  • Lists come back as rows, so a missing field cannot shift a column
  • Every row carries seller, URL, timestamp, FX rate and its publication date
  • Prices resolved to tax-exclusive once, at collection

For monitoring at scale: catalogues, listings, search results, prices.

Browser API

POST /v1/sessions

A real browser, in the country you choose.

A full rendering session you drive: navigate, wait, click, scroll, screenshot. For pages that build themselves in JavaScript, sit behind a consent flow, or have to be seen exactly as a local visitor sees them.

  • JavaScript rendering, with the wait conditions you specify
  • Screenshots and the rendered DOM, kept as retrievable artifacts
  • The session holds one address for its lifetime
  • Same pacing and robots rules as the data API — no exceptions

For evidence and for pages nothing else can read.

Both surfaces share one key, one bill and one audit trail. Start with the data API; reach for the browser only when a page refuses to give up its content any other way.

Why ChatGPT, Claude and Gemini cannot do this

They answer with a rate. You need a seller, a price and a link.

On 20 August 2026 we asked a chat assistant what a given product cost in Japan and the United States, and measured the same product the same day.

Asked

What does this reference cost in Japan versus the United States?

The assistant

The two markets are roughly level.

Measured, same day, like for like

The American market was 17% above the Japanese one.

Both of its numbers were correct. One was a trade-in price and the other a market index, and nothing in the answer said so. The difference changes sign, and the pricing of an entire inventory turns with it.

What a figure carries

A price without provenance cannot be defended in a meeting.

Every row we return carries the record of how it was obtained. It is not a separate call and it cannot be switched off.

price_ex_tax_jpy
12,800
seller
the listing's own seller, as published
url
the listing page it was read from
retrieved_at
2026-08-21T02:20:04.756Z
fx_rate / fx_published_on
the rate used, and the date the rate itself was published
level / attempts
which tier produced it, and every tier that was tried

The tax-exclusive price is resolved once, at collection. Comparisons read only that column — because subtracting a tax-inclusive price from a tax-exclusive one is how a report once said Hong Kong was 12.9% cheaper when the real gap was 4.3%.

What arrives

Five things on your desk every morning.

You do not run a search. It has already run.

01Where you sit todayEach product against every market, tax normalised
02What moved since yesterdayNobody stores it, so it cannot be bought later
03What disappearedThe closest public signal that something sold
04Who is selling itNamed seller, listed price, link — not an average
05Where each figure came fromSeller, URL, timestamp, FX rate and its publication date

See it measured on a real engagement

How it reads a page

Cheapest tier first, and the expensive one is optional.

Tiers run in the order you list them, and each fills only what its predecessors left empty.

  1. 01cssReads the selectors you supplyno cost
  2. 02structured_dataReads the JSON-LD and OpenGraph the site already publishesno cost
  3. 03llmDescribes the page to a model

Passing ["css", "structured_data"] guarantees no model is called. Most commerce pages never need one — which is why monitoring six times the listings costs less than twice as much.

The gate

Thirty-one checks run before a figure leaves the system.

Each check exists because it caught something real. None of these errors raised an exception; every one produced a plausible number.

  • An accessory counted as the product itselfproduced an 877× price spread
  • A single trailing character dropped from a referencemerged a premium variant with the standard one, at a very different price
  • One absence from a results page counted as a salereported 188 items sold in 9.3 hours; the pages had simply reordered

When a check fails on correct behaviour, the check is fixed rather than relaxed. Three of them did exactly that, and all three were corrected rather than switched off.

Nothing came back, or nothing is there

On the morning a read fails, the naive version reports that a competitor's entire inventory cleared overnight.

In the data, a failed fetch and a sold-out market are the same shape. Both are zero rows. And this is a number somebody acts on.

What the naive version does

They redesign their site. Our read misses. Zero rows come back. The diff against yesterday says every listing is gone. The cause is on our side; the report is about their market.

What actually happens

We establish whether each source answered at all this run, and listings from a source that did not answer are excluded from the disappearance verdict — not counted as absent, not counted at all. And one absence is not a sale: listings drop off a page because the sort changed or the paging moved, every day.

A refusal is recorded as a refusal. A 403 or a 429 comes back as an HTTP status, never as an empty success. An empty result reads as "there is nothing there" and sends you to check your selectors — when the actual message was "slow down".

Where it reads from

A page looks different depending on who is asking.

Currency, availability, ranking, the consent banner, and whether an AI assistant names you at all — none of it can be observed from the wrong country.

Per request

You name the country

Every request carries the country it should be read from, and the response records which one was used. The same page can be read from several markets in the same run and compared side by side.

Restraint

Paced whether you ask or not

Requests toward one domain are spaced regardless of how fast you send them, robots.txt is fetched and obeyed including crawl-delay, and a disallowed path is refused rather than fetched. There is no setting that turns this off, and support cannot turn it off for you.

Refusals

A refusal is recorded as a refusal

A 403 or 429 comes back as an HTTP status, never as a successful read with nothing in it. An empty result reads as "there is nothing there" and sends you to check your selectors, when the actual message was "slow down".

What we decline

Each of these is absent from the code, not discouraged in a policy.

A customer who needs one of them is a customer we turn down.

  • No fingerprint spoofing — we do not disguise what the client is
  • No CAPTCHA bypass — a challenge is an answer, and the answer is no
  • No authentication bypass — we read what a visitor reads without an account
  • No exceeding a stated limit — rotating addresses around a rate limit is evasion, not capacity
  • No collection of personal data from the pages we read

There is a commercial reason as well as a principled one. A source that refuses us once is a source nobody gets back — and the loss falls not on us alone, but on every customer who needed that source. The incentive and the ethics point the same way.

The same instrument

Four questions that need a local vantage point.

The machinery does not change between them. Only the list of sources does.

01

Price and availability

Where your stock sits in each market this morning, what moved since yesterday, and when a listing disappeared.

02

What AI answers say about you

Assistants answer differently by country and language. Knowing whether you are named — and how — requires asking from inside each market.

03

Brand protection

The counterfeit listings, unauthorised resellers and hijacked ads a consumer in another country actually sees.

04

Rendering and compliance evidence

What a page showed, in which country, on which date — with the record that makes it usable as evidence rather than as an assertion.

We have not set a price yet.

We have not sold this to enough customers to know what it is worth, and a number invented to fill a table is a number we would have to walk back. Early customers help set it and keep it.

Read the case studySee the collection policy