
How to Find Public RNA-Seq Datasets You Can Actually Reuse
On this page
TL;DR
To find reusable public RNA-seq datasets, search for the biological question, then verify the organism, tissue, assay, comparison groups, available expression files and sample metadata. A relevant paper or GEO accession is a starting point, not proof that the data fits your analysis.
This tutorial uses Valyu DeepResearch to assess three human liver bulk RNA-seq studies for a fibrosis research question. Equivalent Python and TypeScript examples produce a source-linked candidate brief. We then check the repository records and representative file contents, distinguishing count tables from sequencing reads, estimated counts from TPM, and study-level controls from sample-level fibrosis annotations.
If you're an agent: Set up Valyu and run the research question.
If you're a human: Create an account and get an API key.
MCP onboarding: Connect your agent to https://mcp.valyu.ai/mcp and follow the MCP setup guide.
What makes an RNA-seq dataset reusable?
Suppose a computational biologist wants liver expression data for a fibrosis comparison without starting from raw sequencing reads. They need more than a list of papers mentioning fibrosis. They need to know which files contain expression values, how samples map to metadata, and whether the proposed comparison is supported.
The practical outcome is a shortlist with a next action for each study: advance to cohort and quality-control review, investigate a specific gap, or exclude it from the selected task. This workflow does not perform alignment, differential-expression analysis or clinical interpretation.
Figure 1. Discovery finds candidates. File and metadata checks determine what can happen next; they do not replace full biological quality control.
Step 1: turn the research question into inclusion criteria
Start with a concrete question:
Find human bulk liver RNA-seq datasets for studying fibrosis, with count files and evidence identifying non-fibrotic comparison samples.
Specify human tissue rather than mouse experiments or cell lines; bulk RNA-seq rather than microarrays or single-cell assays; and the intended comparison rather than merely a disease keyword. Also specify whether you need raw reads, unnormalised gene counts or a particular processed expression measure.
For an auditable worked example, we assess three identified candidates: GSE135251, GSE126848 and GSE130970. This is a bounded review, not an exhaustive search of every relevant study.
Ask for the accession, tissue and assay, reported groups, exact expression filenames, repository links, metadata evidence and unresolved questions. Keep the original study labels: older records use NAFLD and NASH terminology, and a group label should not be silently replaced with a different clinical classification.
Step 2: run the same research in Python or TypeScript
Install the Python SDK with pip install valyu, or the TypeScript SDK with pnpm add valyu-js. Set VALYU_API_KEY in your server environment; keep it out of source files and logs. No separate model-provider key or reader-facing GEO client is needed.
Save the Python example as research_datasets.py, or the TypeScript example as research-datasets.mts. The .mts file is an ES module; the example can run directly with Node.js 24 or a compatible TypeScript runner.
import sysfrom valyu import Valyuclient = Valyu()if len(sys.argv) > 1:task_id = sys.argv[1]else:task = client.deepresearch.create(query=("Screen GEO studies GSE135251, GSE126848 and GSE130970 as candidates for reusing ""human bulk liver RNA-seq data to study fibrosis with non-fibrotic comparison ""samples. For each, establish the assay, biological material, reported sample ""groups, accessible expression/count files and sample metadata. Distinguish a ""relevant study from a dataset ready for the requested comparison. This is a ""bounded candidate review, not an exhaustive search or a differential-expression ""analysis."),mode='fast',urls=['https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE135251&targ=self&form=text&view=full','https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE126848&targ=self&form=text&view=full','https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE130970&targ=self&form=text&view=full',],research_strategy=("Prioritise original GEO series/sample records, NCBI supplementary-file listings ""and associated primary papers. Distinguish FASTQ reads, unnormalised gene counts, ""estimated counts, TPM and other processed expression. Do not infer a matrix from a ""paper title, a filename containing counts, or an archive named RAW. Separate ""series-level control descriptions from sample-level fibrosis annotations; a NAFLD ""sample with F0 is not automatically a healthy control. Keep unknown cohort ""attributes and access conditions explicit. Do not claim to inspect downloaded file ""contents unless actually inspected. Do not reconstruct identities, promise ""unrestricted reuse rights or assume study independence."),report_format=("Return a concise candidate table with accession, organism/tissue, assay, reported ""sample groups, count/expression filename and direct repository URL, metadata ""evidence, and advance-for-review/review/exclude with reasons. Cite exact ""repository records or papers behind material fields. Separate what the repository ""reports from actual file-content verification. List unresolved fibrosis/control ""mappings, file-format questions and access limitations. Do not report a clinical ""finding or claim the datasets are already suitable for pooled analysis."),output_formats=['markdown',],)if not task.success or not task.deepresearch_id:raise RuntimeError("No task ID returned; inspect the submission before retrying")task_id = task.deepresearch_idprint("Save this task ID:", task_id, flush=True)result = client.deepresearch.wait(task_id, poll_interval=5, max_wait_time=900)if result.status != "completed":raise RuntimeError("Research has not completed")print(result.output)
These are alternative clients for the same task, not two investigations to run in sequence. Run one without a task ID to create the research. Save the printed ID before polling. You can resume that same ID in either language with python research_datasets.py YOUR_TASK_ID or node research-datasets.mts YOUR_TASK_ID.
Python's polling values are in seconds; TypeScript's are in milliseconds. Both examples allow 15 minutes of configured waiting. A local timeout does not cancel a remote task, so inspect or resume the saved ID rather than submitting another request.
Fast mode has a base price of 25 credits at the time of this test. No optional tools or file deliverables are enabled. See current pricing before running. The source URLs and research strategy guide the investigation; they do not guarantee that every required field will be retrieved or correctly interpreted.
Step 3: check what the downloadable files actually contain
The approved fast-mode request completed on 27 October 2026 and returned a 16-entry source catalogue. Its brief explicitly said that sample-level metadata and supplementary-file contents had not been directly inspected. Both SDK clients successfully resumed that same completed task. The checks below are separate editorial verification, not file-validation work performed by the reader-facing code, and our review decisions are not a verbatim copy of the generated ranking.
The following is our editorially checked reference, using original GEO records, supplementary-file listings and bounded file inspections on 27 October 2026. Sample totals describe the deposited records, not independent donors or the final number that will pass QC.
| Candidate and deposited samples | Expression files found | What the evidence establishes |
|---|---|---|
| GSE135251: 216 ; series reports 206 NAFLD biopsies and 10 controls | Archive of individual sample files. GEO processing metadata describes HTSeq gene-level counts; the first inspected member contains gene IDs and integer count values. This is not evidence that the archive contains FASTQ reads. | |
| GSE126848: 57 ; series reports 14 healthy normal-weight, 12 obese, 15 NAFL and 16 NASH samples | A combined table with 57 expression columns. The first 1,000 data rows inspected contained non-negative integer values. That bounded check is not full matrix QC. | |
| GSE130970: 78 ; series reports six histologically normal biopsies and 72 spanning NAFLD | Two distinct processed measures. GEO describes Salmon and tximport with lengthScaledTPM ; the inspected counts-file prefix contains fractional values. These are not interchangeable with the TPM file or unmodified integer read counts. |
An archive named RAW.tar does not, by itself, tell you the biological data level. For GSE135251, the file list contains 216 sample-file identifiers matching the 216 GEO sample accessions. We inspected the contents of one archive member, not every count file. Assembling a common matrix still requires checking gene identifiers and the files being combined.
For GSE130970, the sample processing record explicitly describes gene-level counts and transcripts per million derived through tximport. Fractional estimated counts are not automatically invalid data; they require an analysis method and import procedure appropriate to their provenance. Do not rename TPM as raw counts or round values merely to force a chosen workflow.
Step 4: verify the comparison groups and sample links
The word “control” is not a complete phenotype definition. In GSE135251, the series summary reports ten controls. Reading the individual GEO annotations gives a more specific result:
| GEO-labelled control records | Fibrosis-stage annotation | Number of records |
|---|---|---|
| disease: Control | F0 | 8 |
| disease: Control | F1 | 1 |
| disease: Control | F2 | 1 |
For example, GSM3998224 is labelled control and fibrosis stage 1; GSM3998341 is labelled control and stage 2. Those are observations about the deposited annotations. We have not determined why the labels differ or resolved their clinical interpretation.
Do not turn the series description into “ten confirmed non-fibrotic controls.” Likewise, an F0 sample from a NAFLD cohort is not automatically a healthy control. Preserve the fields, define the intended comparator and investigate any mismatch before selecting samples.
File identifiers also need a crosswalk. GSE130970's 78 expression-column names matched its 78 GEO sample titles in our check. GSE126848's numeric column names did not match its group-style sample titles; the numeric identifiers are in the sample description fields. A leading-zero difference also needs to be handled explicitly. Matching counts alone does not establish the join, and row order is not a substitute for identifiers.
We checked those naming relationships, but did not validate every clinical covariate or complete a biological QC pipeline. GSE126848 also contains a processing-description conflict: a sample record identifies Homo sapiens and a GRCh38 build while one processing line mentions Mus musculus. Flag that for comparison with the primary methods; do not silently rewrite the record or conclude that the actual specimens were mouse tissue.
Step 5: decide what to advance, investigate or exclude
The next action depends on the selected research question, not a generic dataset-quality score. Our review decisions for this fibrosis task are:
| Candidate | Decision | Next action |
|---|---|---|
| GSE135251 | Advance to cohort and file QC | Preserve the sample-accession/file mapping, choose the comparator from explicit annotations, then check all selected count files and gene identifiers before matrix assembly. |
| GSE126848 | Review | Retain the combined-count-file lead, document the numeric identifier crosswalk, and resolve the methods metadata and required sample-level fibrosis detail. |
| GSE130970 | Review | Keep the counts/TPM distinction, confirm the appropriate import and analysis approach for the processed counts, and define the normal-versus-F0 comparison precisely. |
These are editorial research-queue decisions, not biological validation results. An accession can be useful without being ready for the requested analysis. Conversely, not meeting this task's requirements does not make a study generally unusable.
The outcome is a source-linked candidate pack with actual download locations, observed file types, metadata checks and specific follow-ups. It is not a pooled analysis, a replication of the papers or a promise that the three studies are independent or directly comparable.
How to adapt the workflow
Change the organism, tissue, assay and comparison. Ask for discovery of candidates when you do not yet have accessions; use a bounded review when you want to inspect particular leads. For single-cell or spatial studies, change the file and metadata requirements rather than reusing bulk-RNA-seq assumptions.
Public download access also does not establish every permission for a proposed reuse. Check the repository terms, paper, study-specific restrictions and your institutional requirements. Do not assume that accessible processed files imply equally accessible raw reads.
Use Valyu Search when your own application controls retrieval and evidence handling, or DeepResearch for a completed multi-source investigation. For a ready-to-use scientific research interface, explore Valyu Bio.
FAQ
Can I get RNA-seq count data from GEO without processing FASTQ files?
Sometimes. GSE126848 provides a combined count table; GSE135251 provides individual sample count files in an archive. Other studies may offer only different expression measures or require processing raw reads. Inspect the deposited files rather than assuming every accession supplies a ready-made matrix.
Are raw reads, raw counts, estimated counts and TPM the same thing?
No. Reads are sequencing data. Gene-count tables summarise quantification results. Estimated counts depend on the quantification and import pipeline, while TPM is an abundance measure. Preserve how each file was produced and choose a compatible analysis method.
Does a control label prove a sample has no fibrosis?
No. The checked GSE135251 records demonstrate why the group label and fibrosis-stage field must both be inspected. Do not substitute one for the other.
Does the code download and validate the complete matrices?
No. It requests a Valyu research brief. The separate repository and file checks described here were editorial verification. Full downloads, matrix assembly, sample selection and biological QC are subsequent analysis work.
Should I run both language examples without a task ID?
No. That would create two paid research tasks. Choose one client to create the investigation, then use its saved ID to resume the same task in Python or TypeScript.
Is public availability enough to establish reuse rights?
No. Check the relevant terms and study restrictions for the intended use. This tutorial verifies specific access and data characteristics, not legal permission for every application.
Cover photograph: Maggie Bartlett, NHGRI / Wikimedia Commons. Public domain. Cropped and resized for this cover. Contextual genomics-laboratory photograph, not an image of the reviewed studies' samples.
Related Blogs
How to Build a Biomedical Research Agent with PubMed and ClinicalTrials.gov
How to Integrate Research Papers into Your AI Agents (Complete 2026 Guide)
The Best Academic Search APIs for AI Agents in 2026
How to Integrate PubMed Papers into Your AI (Complete 2025 Guide)
More from the blog





Valyu Add
Join 12,000+ professionals and knowledge workers.
Valyu Add is a free weekly research briefing for builders, investors and operators. Every issue is sourced, cited and verified with Valyu DeepResearch.
