Why Agent Shopping Spreadsheets Rot, and What Slows It Down
Data this note rests on: A row is a compound claim whose accuracy equals its fastest-decaying field: in a 195-entry pool with 2,806 images, 37 rows already sit below the five-image line, while the price, seller and link fields decay on schedules nobody in the sheet controls.
Background: why lists decay
A shared agent spreadsheet stays accurate only as long as its fastest-decaying field stays untouched. That is the whole mechanism in one sentence. In the pool this site records, 195 entries carry 2,806 images, 20 brands and 8 categories, all extracted on 2026-09-29 from one source marketplace, and 37 of those rows already sit below the five-image line that the index layer uses. Those 37 rows are not old and were not judged as bad. They show what decay looks like when it is written down as a field value rather than argued about as a quality opinion.
The reason a list decays is that a row is not one fact. It is a bundle of claims, each of which is owned by somebody outside the sheet: the marketplace owns the item identifier, the seller owns the storefront and the photograph set, the agent owns the fee schedule, and the destination authority owns the threshold. A sheet author controls none of them. The accuracy of the row is therefore the minimum across its fields, in the same way that a chain is as strong as its weakest link, and the strongest field cannot compensate for the weakest one.
- The link field decays when the marketplace rewrites its identifier parameters, or when a sharer re-tags the link with tracking parameters on the way through.
- The seller field decays when a storefront is renamed, split, or replaced behind the same item identifier.
- The image field decays when a seller re-shoots a gallery for a new batch, which removes the photographs that a buyer used as evidence.
- The price field decays with every repricing, and the direction is not fixed: a price can fall as easily as it can rise.
- The status field decays slowest, because it is derived from the record rather than from the marketplace, which is exactly why it is the field this site can keep.
This site can read link form and tracking parameters by string analysis, and it can count the structure of its own pool: image group sizes, price distribution, category distribution, source platform and brand count. It cannot test whether a link resolves, how long a parcel takes, or whether a seller is dependable, because none of those three can be answered without sending requests, buying goods, or collecting outcomes over time. The method page at /method/ states the same boundary for the records themselves.
Part 1: link half-life
Link half-life is the interval over which half of a copied set of pointers stops leading to the listing it names. The term is a model here and not a measurement, and the distinction matters. Measuring it would require resolving the links on a schedule and recording which ones failed, which means repeated requests to marketplaces, which this site does not make. The link health instrument refuses to answer the availability question for the same reason, and its boundary line says so on the page.
What can be read without a request is the shape of a link: which host it points at, which parameter carries the item identifier, whether extra parameters were attached by whoever shared it, and whether it is still in the form the platform itself produces. That is a string analysis, it is deterministic, and it produces the same answer for the same input every time. The walkthrough at /field-notes/link-health-checker-walkthrough/ shows the reading step by step on real link forms.
| State | What the string shows | What it cannot tell you |
|---|---|---|
| Clean form | The host and identifier parameter only, with no added parameters. | Whether the listing still exists, still ships, or still costs what the row says. |
| Re-tagged | A valid identifier followed by affiliate, invite, partner or campaign parameters added by a sharer. | Whether the additional parameters change the price you see, and who receives the attribution. |
| Rewritten | The identifier wrapped in the link format of a different agent or sharing site. | Whether the underlying item is the same one the row was written for, beyond the identifier match. |
| Identifier only | A bare item number with no host or path context. | Which platform it belongs to when more than one platform uses numeric identifiers of that length. |
| Malformed | A truncated or reassembled string that does not parse into host plus identifier. | Whether it was broken by a spreadsheet export, a chat client, or a manual edit. |
- Source:
- The link-form classification used by the link health instrument on this site: host detection, identifier parameter extraction, tracking parameter detection, and form judgement.
- Sample:
- No qualifying sample yet. The classification runs per link on demand, so no frozen pool-wide tally of states exists, and no resolved-or-unresolved outcome is recorded for any link.
- Recorded:
- 2026-W40
- Known gap:
- Resolution is never tested. A clean form does not mean a listing resolves, and a re-tagged link does not mean the listing is gone. The table describes what a string can be, not what happened to it.
Tracking parameters deserve their own sentence because they decay differently from identifiers. An identifier belongs to the marketplace and changes when the marketplace changes. A tracking parameter belongs to whoever last shared the link, and it accumulates: a sheet copied from a video, into a chat group, and back out into a second sheet can carry three sets of parameters on the same item identifier. The parameters do not usually break the link, which is why nobody removes them, and they quietly change who gets credited for a click that started in a document nobody remembers writing.
The consequence for a reader is that the age of a row is invisible from the row itself. Two links that look identical in a spreadsheet can be a first-generation copy and a fifth-generation re-tag, and only the second one tells you that at least four people have handled the row since it was written. This is the argument for attaching a date to the row rather than to the sheet, which is what the check log at /vault/changelog/ exists to record.
Part 2: seller identity changes
The field that survives a re-share best is the marketplace item identifier, because it belongs to the platform and the platform has an interest in keeping it stable. The seller behind that identifier is a different object with a different lifetime. A storefront can be renamed without changing a single item identifier, and a factory that supplies several storefronts can appear in a pool as several unrelated sellers carrying near-identical goods at near-identical prices.
This pool records 20 brands across 195 entries, which is a wide spread for a small pool and a reminder that a brand field is a transcription rather than an identity. The value came from the listing text on the day of extraction. Nothing in the record follows what happened to the storefront after that date, and nothing in the pool claims to.
| Layer | What it identifies | Decay driver | What this site holds |
|---|---|---|---|
| Item identifier | One listing on one marketplace. | Platform-side identifier changes and relisting. | A transcribed identifier and a source link for every entry in the pool. |
| Storefront | The seller account that published the listing. | Renaming, account splitting, and replacement behind the same identifier. | Nothing beyond the listing text captured at extraction. |
| Brand label | The name printed on or claimed for the item. | Seller edits, relabelling, and plain transcription differences. | 20 distinct brand values across 195 entries, as recorded on 2026-09-29. |
- Source:
- Field structure of the entry pool extracted on 2026-09-29, plus the identity layers implied by the source link and brand fields.
- Sample:
- n = 195 entries. The brand count is a distinct-value count over the recorded brand field, with empty values excluded.
- Recorded:
- 2026-W40
- Known gap:
- No seller history is held. Nothing in this pool records whether a storefront continued trading, changed hands, or was renamed, and no seller-level reliability figure is published anywhere on this site.
A reader who wants to know whether a seller is dependable is asking a question this site cannot answer. Answering it would need order outcomes attributed to sellers, collected over time and with a stated sampling rule. That dataset does not exist here, and the absence is stated rather than filled with a proxy.
The practical effect of seller churn is that a row can be right about the item and wrong about the source at the same time. The item identifier still points at the listing, the listing still shows the same product, and the storefront that made the version a buyer liked has moved to a different identifier. A sheet has no column for that, which is why a row that has been reused across several hauls tends to drift toward whatever storefront is currently cheapest rather than whatever storefront produced the earlier batch.
Part 3: image sets expire
A photograph set is the field that disappears most completely when it goes. Seller galleries are re-shot for new batches, and a relisted item usually arrives with a fresh gallery rather than the old one. The archived copy in a spreadsheet then becomes the only surviving record of what the listing looked like when the row was written, which is useful right up to the moment somebody compares it to the live listing and finds that neither the lighting nor the stitching matches.
| Measure | Value | Note |
|---|---|---|
| Smallest image group in the pool | 1 image | One entry carries a single image and nothing else. |
| Median image group | 14 images | Half the pool carries more than this and half carries less. |
| Largest image group | 46 images | The largest single gallery recorded in the pool. |
| Total images | 2,806 | The full volume of QC material the 195 entries carry. |
| Entries at or above five images | 158 | These reach the index layer under the published rule. |
| Entries below five images | 37 | These stay out of the index, and they are the unverified count as well. |
- Source:
- Image counts recorded per entry in the pool extracted on 2026-09-29, read against the five-image index threshold published on the method page.
- Sample:
- n = 195 entries and 2,806 images in total. The smallest, median and largest groups are 1, 14 and 46 images respectively.
- Recorded:
- 2026-W40
- Known gap:
- Only summary figures are held. A band-level histogram is not published here because the frozen record contains these measures rather than a distribution, and a distribution reconstructed by eye would not be reproducible.
The five-image threshold is worth reading as a decay instrument rather than a quality score. It is a single field comparison, it is applied to every row the same way, and it is published before the count is taken, so anyone with the same pool can reproduce the same 158 and 37. What it detects is thin photographic coverage, which correlates with a seller who did not invest in the listing, but it does not detect a gallery that has been replaced by a different batch of the same item.
An image group is a photograph of a batch, not a specification of a product line. Two entries with the same identifier and different galleries can both be accurate and still disagree about the item, because they were shot at different times from different stock.
Part 4: price drift
Price is the field most often frozen at the moment a sheet is written and most often trusted afterwards. A row copied into a budget carries the price from the day it was copied, and the copy is usually indistinguishable from the original. This pool holds one price per entry, all observed on 2026-09-29, running from $5.17 to $451.10 with a median of $31.76.
| Category | Entries | Range | Median |
|---|---|---|---|
| Shoes | 24 | $24.09 to $100.84 | $68.68 |
| Hoodies and Sweaters | 26 | $12.13 to $101.88 | $37.18 |
| T-Shirts | 24 | $13.61 to $45.36 | $22.23 |
| Jackets | 24 | $19.06 to $156.27 | $53.89 |
| Pants and Shorts | 25 | $16.07 to $69.20 | $44.62 |
| Headwear | 24 | $7.94 to $32.12 | $16.22 |
| Accessories | 24 | $5.17 to $451.10 | $26.77 |
| Other Items | 24 | $13.88 to $89.12 | $35.81 |
- Source:
- Prices as recorded per entry in the pool extracted on 2026-09-29, grouped by the category field of each row.
- Sample:
- n = 195 entries across 8 categories, with category counts between 24 and 26.
- Recorded:
- 2026-W40
- Known gap:
- One price per entry at one date. No second observation exists, so these figures describe spread between items rather than movement of any item, and no drift rate can be computed from them.
The spread between categories is large enough to matter to a plan. The median in Headwear is $16.22 and the median in Shoes is $68.68, a factor of roughly four, so a budget built on one category will be wrong in the other direction for the next one. The Accessories row is the clearest warning in the table: a median of $26.77 sitting above a maximum of $451.10 means the category contains both the cheapest entry in the pool and the most expensive one, and a single number cannot represent it.
Drift matters more than the range because two separate lines depend on price. The first is the budget line, which is obvious. The second is the duty line, because assessment thresholds are value-based: a destination that charges tax above a threshold is testing a number that the seller can change without touching the parcel. A row whose price is six months old is therefore not only a budgeting error but a possible assessment error, and the two errors do not point in the same direction. The assumptions note at /field-notes/assumptions-about-spreadsheets/ takes this apart field by field.
Part 5: the cost of checking
Lists rot because checking costs more than leaving them. The cost is not mysterious: it is the number of rows multiplied by the time each row takes, multiplied by how often the check runs, plus the cost of any check that cannot be done from the record alone. A sheet with 195 rows checked properly every week is 195 checks a week, and that is before counting the checks that require opening a live listing, asking a warehouse for another photograph, or waiting for a parcel to arrive.
- Structural checks read the record itself: image group size, presence of a source link, presence of a brand or category value, and the form of the link string. They are deterministic, they need no request, and they can run on a weekly cadence without an external dependency.
- Field checks require the live source: whether a listing still exists, what it currently costs, and what its gallery currently contains. These need a request per row, so they scale with the pool and cannot be run on every row at every cadence.
- Outcome checks sit outside the sheet entirely: whether the parcel arrived, whether the item matched, and whether a dispute was resolved. A spreadsheet cannot host these, which is why a sheet that looks complete can be silent about the only things that actually went wrong.
No per-row check time is published on this site. Publishing one would require timing a real check routine across a real pool, which is a measurement we have not taken. The arithmetic above is a shape, not a benchmark, and it should not be quoted as one.
The check log at /vault/changelog/ is the compromise that falls out of this arithmetic. It does not claim that every row is re-verified every week. It records which rows changed status, which parameters were corrected, and which data gaps opened or closed, with the week attached. The value is not completeness but dating: after a correction is logged, a reader can tell whether a figure was checked in the current week or inherited from a week they cannot see. That is a smaller promise than a live spreadsheet makes and a much easier one to keep.
Cost also explains an asymmetry that readers notice without naming. Structural fields get maintained because they are nearly free to maintain. Price, seller and availability get maintained sporadically because each one needs a request, and requests cannot be batched without a tool that a hobby sheet does not have. The result is a document that is precise about the things that do not change and vague about the things that do, which is the opposite of what a buyer needs at the moment of purchase.
The counter-argument
There is a serious case that decay does not matter, and it starts from how these documents are actually used. A row is typically read once, at the moment of copying it into an order, and a sheet is disposable: a haul is planned, ordered, shipped and forgotten. If the interval over which a sheet stays accurate is longer than the interval over which it is used, decay never bites, and worrying about link half-life is a hobby rather than a risk control. Under that reading, the correct amount of maintenance for a personal sheet is approximately none.
The counter-argument holds for a single-use row and fails wherever a row is reused. Reuse is not unusual, and it happens in four specific ways: a sheet is inherited by somebody who did not write it, a row is cited as evidence in a dispute, a row feeds a budget or a threshold decision months later, and a row is read by a stranger who arrived through a search engine and cannot tell when it was written. Each of those cases lengthens the usage interval past the decay interval, and each one converts a stale field from an inconvenience into a wrong answer with consequences attached.
| How the row is used | What breaks when it is stale | Sensitivity |
|---|---|---|
| Copied into an order within days of being read | Very little: the reader is the author and sees the price at checkout. | Low |
| Inherited from another person | The reader cannot tell which fields were checked, or when. | High |
| Cited as evidence in a dispute | A price or image claim that no longer matches any live page. | High |
| Used for budget or threshold planning | The value feeding a value-based rule has moved since the row was written. | High |
| Reached by a stranger through search | Nothing in the visible text says how old the row is unless a date is attached. | Medium |
- Source:
- Usage modes inferred from the fields this site publishes, from the check log cadence, and from the row-level check week recorded with every entry.
- Sample:
- No qualifying sample yet. No usage, traffic or outcome data is collected on this site, so no failure frequency can be counted for any of these modes.
- Recorded:
- 2026-W40
- Known gap:
- The sensitivity column is reasoning about each use rather than an observed failure rate. A genuine ranking would need outcome data that this site does not hold and has not collected.
The disagreement cannot be settled with the data held here. Settling it would require following a set of rows over time and recording which fields changed, which is the one measurement that would turn link half-life from a model into a number. Until somebody does that, both positions remain arguments, and this site marks its own as one.
A reading that survives both positions is this: the counter-argument is right about single-use rows and wrong about reused ones, and the only reliable way to tell which one is in front of you is whether a date is attached to the row. A dated row tells a reader how much weight it can carry. An undated row carries whatever weight the reader happens to assign it, which is usually more than it deserves.
Conclusion and boundary conditions
Three fields decide whether a row can be reused: the form of the link, the size of the image group, and the date attached to the price. A reader who checks those three is not verifying the row, but is establishing what kind of claim it is. A row with a clean link form, a fourteen-image group and a current price is still not a promise that the item exists, and it is at least honest about which parts of the claim were ever checked.
- One extraction point: every figure on this page comes from 2026-09-29, and no second snapshot of the same fields exists.
- No availability testing: link reading is string analysis without requests, so nothing here reports whether a link resolves.
- No transit data: no parcel in this pool was followed, so no shipping time or delay figure is quoted.
- No seller reliability data: no order outcome is attributed to any seller, so no seller ranking is published.
- The 37 rows below the image threshold are excluded by a published rule, not judged: the rule counts images, and an item with a small gallery is not thereby a bad item.
The rules behind every count on this page are published at /method/, including the status derivation and the index threshold. Status changes and parameter corrections are recorded week by week in the check log at /vault/changelog/. The measurement boundary itself is set out in /field-notes/measuring-a-spreadsheet/, the field-by-field assumption list sits in /field-notes/assumptions-about-spreadsheets/, and the direction this record layer is moving in is argued in /field-notes/where-spreadsheets-are-heading/. A reader who wants to see the link reading applied step by step should open /field-notes/link-health-checker-walkthrough/.
Decay cannot be eliminated from a shared list, because every field in it is owned by somebody outside the sheet. It can be slowed in two ways that are entirely within the sheet author control: attach a date to each row, and keep the checks that need no request on a fixed cadence. Everything else is a maintenance promise that somebody has to keep paying for.