Platform specifics
What makes D2C brand site collection different from everything
else
These are the reasons a D2C brand sites dataset needs its own
handling rather than a shared retail schema.
There is no shared schema, so scale is linear and you should price
it that way
A marketplace gives you thousands of sellers for one integration.
Shopify gives you thousands of merchants for one architecture.
Bespoke brand sites give you one site per integration, and that
does not improve with volume.
-
Every site is its own build. Different platform or custom
stack, different markup, different variant handling, different
availability logic.
-
Every site is its own maintenance liability. A redesign
breaks that pipeline and nothing else.
-
Cost scales with site count, close to linearly, and a
proposal that prices fifty sites like five is either mispriced
or planning to under-deliver.
We scope and price per site, and we say which sites in a proposed
list are straightforward and which are not. That is a less
impressive-sounding pitch than a single flat number, and it is the
one that survives month four.
Maintenance is the service, not the build
Building an extractor for a brand site is a day's work. Keeping
fifty of them correct for two years is the actual engagement, and
it is where projects run by whoever had spare capacity fall apart.
What that requires in practice: layout-drift detection per site
rather than a global check, alerting on null-rate movement per
field per site, a named owner for each pipeline, and a stated
response window when a site changes.
We publish per-site successful-capture rate with every delivery,
so a pipeline that has silently degraded is visible in the data
rather than discovered when someone questions a number. A single
coverage figure across fifty sites hides the three that stopped
working.
Variant and availability logic is where bespoke sites diverge most
There is no convention. A brand site may render availability
client-side, gate it behind a region selector, express size or
option availability only after selection, or show a product as
available while every option is unavailable.
We capture option_offered separately from
option_available wherever the site exposes both, and
record availability_source noting how availability
was determined on that site — because on one site it is a
field and on another it is an inference from whether an
add-to-cart control is enabled.
Recording how each site's availability was determined is what lets
a client judge which sites' availability figures to trust, rather
than being handed one column that means different things in
different rows.
Region and currency handling varies per site, and it matters
Some brand sites serve one market. Others switch price, currency,
assortment and availability by detected or selected region, and
the mechanism differs on every site.
We record the region context each observation was taken under, and
never mix regions in one series. Where a site's region handling
cannot be controlled reliably, that is stated for that site rather
than averaged into a figure that looks clean.
This is the most common source of quiet error in multi-brand D2C
datasets: rows collected under different region contexts,
combined, with nothing on the record saying so.
When we say a site is not worth collecting
Some sites are genuinely not viable to collect reliably —
heavily dynamic, aggressively rate-limited, or structured so that
the data a client wants is simply not on the public site.
We say so during scoping rather than accepting the work and
delivering a pipeline that fails intermittently. A dataset with
three unreliable sources in it is worse than one with three fewer
sources, because the client cannot tell which numbers to trust.
The pilot exists partly for this. It returns real extraction from
your actual list, which is also the point at which we tell you if
something on that list should come off it.