One call: vp.collections.export(name, "out/") writes every vector's original id, its float32 values at your original dimension, and all its metadata into a directory of parquet files that pandas, DuckDB, Polars, or any parquet reader opens directly. There are no export fees, no row ceilings, no tier or plan restrictions, and no throttling — your data is yours, and leaving (or just backing up) is a first-class operation at any scale.

End to end with the 5,000-film sample corpus:

from veep import VP, samples

df = samples.dataframe()

vp = VP.from_creds()
vp.collections.create("export-answer-demo", tier="hot")
vp.vectors.upsert("export-answer-demo", dataframe=df)

result = vp.collections.export("export-answer-demo", "out/")
print(result)
ExportResult(job_id='ca6209e4-b3bd-47ff-9f64-27c5c18e182c', path=PosixPath('out'), parts=1, total_bytes=9332663, status='complete')

Everything comes back, readable with ordinary tools:

import pandas as pd

back = pd.read_parquet("out/")
print(back.shape)
print(back.columns.tolist())
(5000, 6)
['id', 'vector', 'title', 'year', 'genre', 'plot']

All 5,000 rows, ids intact, every metadata column alongside the vectors. If we padded your vectors internally for SIMD alignment, the padding is stripped on the way out — you get your original shape back.

The details

The parquet output loads anywhere — including back into pgvector, if you ever want to reverse the trip described in How do I migrate from pgvector?. For the full walkthrough (manifests, parallel downloads, LangChain's store.export()), see Exporting your data.

vp.collections.delete("export-answer-demo")