Why a folder-like listing can hide objects
A volunteer browsing digitized photographs may see a neat list of years and assume it contains every stored file. S3 is fundamentally a key-based object store, and an apparent folder is normally an agreed naming convention. The `delimiter` option on `ListObjectsV2` groups keys sharing a prefix into `CommonPrefixes` entries. Those groups are not themselves ordinary stored objects. A listing with `delimiter=/` can appear short even when the underlying group contains thousands of images. An archive browser may present that hierarchy, but a preservation inventory must eventually enumerate the actual object keys rather than count only the visible groups.
Choose the intended scope and delimiter
Start with an approved bucket and prefix, such as `collections/2025/`, and agree that `/` separates collection levels. Use `Prefix` to restrict the listing to that part of the keyspace and `Delimiter` to group the next level. The server returns ordinary `Contents` entries for keys at the current level and `CommonPrefixes` for grouped children. Objects with unexpectedly placed slashes can appear deeper than catalog staff expect. Do not alter object names simply to make the interface tidier; an accession key may be referenced by external systems. Keep scope, prefix, and delimiter in the audit record.

Interpret CommonPrefixes as navigation, not coverage
Consider `collections/2025/photo-a.tif` and `collections/2025/labels/label-a.txt`. When you list within `collections/2025/` using `/` as the delimiter, the top-level photograph can appear under `Contents`, while `collections/2025/labels/` appears as a group under `CommonPrefixes`. That group is not evidence that only one label file exists. The AWS API counts each rolled-up group as one return against `MaxKeys`. A browser should turn it into a navigation link; an inventory job should descend into it and gather exact keys. Preserve the returned prefix string instead of guessing its spelling.
Continue every page before concluding a scan
The S3 response can set `IsTruncated=true`, in which case the client must use `NextContinuationToken` in the following request. A first page is not a complete folder listing, whether it contains actual objects, grouped prefixes, or both. Maintain a visited-prefix set and a continuation-token loop for each requested scope. Store tokens only as opaque continuation markers; they are not real object keys. If an API call fails mid-run, mark that scope incomplete and resume safely rather than publishing a falsely comprehensive total. Apply bounds and backoff appropriate to the application to avoid unnecessary request costs.
Do not equate visible groups with object counts
A UI might display three folder-like entries and four directly listed objects. That does not mean the bucket holds seven objects. Each group may contain many descendants, and object versions require separate accounting if the preservation question concerns historical versions. Likewise, an empty visible page does not necessarily mean there are no later entries if a continuation marker is present. Compute separate counters for direct `Contents` entries, grouped prefixes, fully traversed descendant keys, and incomplete branches. If an inventory report is needed for compliance, compare the result with an authoritative S3 Inventory report or version-aware listing.
Respect unusual keys and encoding rules
S3 object keys may contain characters that need special handling in a browser, including spaces and symbols. AWS provides `encoding-type=url` for listing responses when needed; this is different from the `delimiter` grouping choice. Display a human-readable path without changing the canonical key used for retrieval. Avoid concatenating unsanitized object keys into HTML, shell commands, or public links. A key that resembles a path traversal segment is still a key, not permission to access a local filesystem. Review access policies separately: the ability to list a prefix does not automatically grant download or public-sharing rights.

Account for directory-bucket differences
AWS documents special behavior for S3 directory buckets. A slash is the supported delimiter, supported prefixes have restrictions, and listing while multipart uploads are in progress can produce extra grouped prefixes. Some parameters supported by general-purpose buckets are unavailable or behave differently. Check the bucket type and current API reference before reusing a general-purpose-bucket browser. A pagination test that works in one bucket type does not establish identical behavior in another. Make this distinction visible to maintainers so they do not misdiagnose an unexpected group as either a missing archival file or a completed upload.
Build a hypothetical collection walk
Imagine a collection with a main `master.tif`, a nested `captions/` group, and a nested `derivatives/` group. The browser lists the root prefix, shows one direct file plus two expandable groups, then follows each group and any continuation tokens. The resulting inventory records the exact retrieved keys and distinguishes source masters from web derivatives by catalog metadata, not solely by path names. This is a hypothetical diagram and algorithm, not the output of a live AWS account. A reviewer should confirm the collection registry against the final list rather than trusting the number of apparent folder rows.
Publish a browse view, not a false preservation claim
Before release, test a representative set of unusual filenames, deep descendants, zero-content groups, and multi-page scopes. Check that authorized users can see expected records and that private objects remain governed by IAM and application authorization. Explain in interface copy that grouped folders are a navigation aid. For audit reports, record bucket identifier, scope, listing time, pagination completion, possible concurrent mutations, and which versioning checks were not performed. The right conclusion is that the browser reached its intended keys within the defined scope, not that S3 has guaranteed an immutable or complete archival snapshot.

How We Research
Primary official sources reviewed November 11, 2026: Amazon S3 ListObjectsV2 API; AWS CLI list-objects-v2; Amazon S3 object keys. We compared the AWS ListObjectsV2 API fields for Prefix, Delimiter, CommonPrefixes, and continuation tokens against its documented examples. The collection walk and grouped counts are teaching illustrations; no S3 bucket was queried. All sample identifiers, interface states, examples, images, and comparisons in this article are editorial teaching materials, not test results, measured figures, actual API calls, or vendor screenshots. Product parameters, model support, region availability, quotas, access requirements, and prices may change. Confirm current vendor documentation and institutional permission before using any workflow with real data.
Frequently Asked Questions
No. They represent grouped key prefixes; they are not automatically separate object resources.
No. A group can represent many nested object keys and counts as one listing return against MaxKeys.
No. Follow IsTruncated and NextContinuationToken for each scope until the listing completes.
No. A standard ListObjectsV2 listing is not a complete history of all object versions; use version-aware inventory methods.
Yes, slash is the supported delimiter for directory buckets, but other prefix and listing constraints differ from general-purpose buckets.
