Skip to content

Advanced Search

The Dandiset list's search box accepts a Gmail-style syntax that lets you mix free-text terms with structured key:value operators, so you can filter by creation date, species, approach, measurement technique, and owner from the same input.

Example

neuropixels species:mouse created_after:2022-01-01 approach:electrophysiological published_after:2022-01-01 modified_after:2022-01-01 modified_before:2026-01-01 technique:"multi electrode extracellular electrophysiology recording" owner:"Jerome Lecoq"

That query mixes free text with every kind of operator: date bounds, the three asset-summary operators, and owner. At the time of writing it returns two Dandisets, 000253 and 000563. Run it in the Archive.

Operators combine with AND. Quoted phrases ("like this") are treated as a single value. Anything you type without a key: prefix is full-text matched against the Dandiset metadata, the same way the search box worked before operators existed.

When you start typing an operator name, the search box offers an autocomplete dropdown of the available operators. The question-mark icon at the right edge of the box opens a help popover listing them with examples.

How Operators Combine

Operators describe the Dandiset, not individual assets. Each operator is an independent constraint at the Dandiset level. species:mouse species:rat returns Dandisets whose asset summary lists both mouse and rat.

Free text and operators are ANDed together. place cells species:mouse returns Dandisets whose metadata contains "place" and "cells" and whose asset summary includes mouse.

Multiple different operators are also ANDed. species:mouse approach:electrophysiological returns Dandisets that have some mouse data and some electrophysiology data, possibly described by different entries in the summary.

To use a multi-word value, wrap it in double quotes, e.g. technique:"spike sorting". Wrapping a whole token in quotes opts out of operator parsing, so "species:mouse" searches for the literal text species:mouse rather than running the operator.

Operator Reference

Dates

All date operators take an ISO date in the form YYYY-MM-DD. The _before bound is exclusive and the _after bound is inclusive.

Operator What it filters
created_before:YYYY-MM-DD Dandiset's created timestamp before the date
created_after:YYYY-MM-DD Dandiset's created timestamp on or after the date
modified_before:YYYY-MM-DD Most recent version's modified timestamp before the date
modified_after:YYYY-MM-DD Most recent version's modified timestamp on or after the date
published_before:YYYY-MM-DD Most recent published version's created timestamp before the date (draft-only Dandisets are excluded)
published_after:YYYY-MM-DD Most recent published version's created timestamp on or after the date
created_after:2024-01-01                                # everything created since 2024
modified_after:2025-01-01 modified_before:2026-01-01    # changed during 2025
published_after:2023-01-01                              # published since 2023

Asset Summary

These operators match case-insensitive substrings against the summary of a Dandiset version's assets (assetsSummary in the version metadata), which is the same information shown in the overview on a Dandiset's landing page.

Operator What it matches
species:VALUE Any assetsSummary.species[].name
approach:VALUE Any assetsSummary.approach[].name
technique:VALUE Any assetsSummary.measurementTechnique[].name
species:mouse                          # House mouse, Mus musculus, and so on
species:"Mus musculus"                 # narrower phrase match
approach:electrophysiological
technique:"spike sorting"

When several of these operators appear in one query, they must all be satisfied by the same Dandiset version, so a draft version and a published version with different summaries do not combine into a spurious match.

Owner

owner:VALUE restricts the results to Dandisets owned by a matching user. VALUE is matched case-insensitively against the owner's GitHub username, email address, first name, last name, or full name in "first last" form.

owner:alice
owner:alice@example.com
owner:Smith                            # any user named Smith
owner:"Jane Doe"                       # full display name

If a name matches multiple users, for example two people named Smith, Dandisets owned by any of them are returned.

Error Messages

Invalid syntax does not fail silently. The common cases are:

What you type What you get back
specie:mouse 400: Unknown search operator "specie". Did you mean "species"? Wrap the term in double quotes (e.g. "foo:bar") to search for it as text.
created_after:not-a-date 400: Invalid date for "created_after": 'not-a-date'. Use YYYY-MM-DD.
hello "world 400: Unbalanced quote in search query. Remove the stray quote, or wrap the intended phrase in matched quotes.
owner: (empty value) 400: Operator "owner" requires a value (e.g. owner:something).

Typo suggestions come from difflib.get_close_matches, so treat them as a hint rather than as authoritative.

Search queries are capped at 1024 characters, which is well above any reasonable interactive query.

Using the Syntax From the API

The same syntax works against the REST API. The search string goes in the ?search= query parameter on /api/dandisets/:

curl --get 'https://api.dandiarchive.org/api/dandisets/' \
  --data-urlencode 'search=neuropixels species:mouse created_after:2022-01-01 approach:electrophysiological published_after:2022-01-01 modified_after:2022-01-01 modified_before:2026-01-01 technique:"multi electrode extracellular electrophysiology recording" owner:"Jerome Lecoq"'
import requests

query = (
    'neuropixels species:mouse created_after:2022-01-01 '
    'approach:electrophysiological published_after:2022-01-01 '
    'modified_after:2022-01-01 modified_before:2026-01-01 '
    'technique:"multi electrode extracellular electrophysiology recording" '
    'owner:"Jerome Lecoq"'
)
r = requests.get(
    'https://api.dandiarchive.org/api/dandisets/',
    params={'search': query, 'draft': 'true', 'empty': 'true'},
)
r.json()

The OpenAPI description at https://api.dandiarchive.org/swagger/ lists every operator inline.

Limitations and Notes

Matching is by case-insensitive substring. species:mouse matches House mouse, Mus musculus, and anything else containing the substring. There is no exact-match mode at the moment, so use a longer substring to narrow the result.

Operators always combine with AND. There is no OR or NOT, and no grammar for nesting, so (species:mouse OR species:rat) is not supported. To express OR, run two queries.

The existing ?user=me query parameter still works for "my Dandisets". There is no owner:me alias in the operator syntax.