Aptaseek LLC · St. Louis, Missouri

A sample that needs an answer today goes to a lab that answers in a week.

Aptastat is a handheld potentiostat that reads aptamer-based electrochemical sensors at the point of need. It sweeps a small AC excitation across frequency, fits the impedance spectrum, and reports the change in charge-transfer resistance — the quantity that moves when a target molecule binds to the electrode surface.

It is a research instrument. Everything on this page is something it has been measured doing, and the things it has not been measured doing are listed too.

  • Instrument — validated on resistive standards
  • Assay — not yet demonstrated on aptamer-modified electrodes
  • Funding — NIH/NIDA SBIR Phase I (R43) in preparation, not awarded
An aptamer monolayer on a gold electrode, with one target molecule bound. Two Nyquist spectra on one electrode. The bound state draws the larger semicircle; the difference in diameter is delta R sub ct. ΔRct bound baseline Z′ / Ω
A target binds at the surface and the charge-transfer arc grows. What the instrument reports is the difference between the two, on the same electrode. The method is below.

Where the lab isn’t

The fastest confirmatory answer in drug checking is mass spectrometry, and mass spectrometry is a building, a technician and a turnaround. The fastest field answer is an immunoassay strip: one target, yes or no, and a new strip for every new adulterant. Between them there is nothing that a harm-reduction worker, a clinic or a field team can carry, that gives a graded reading rather than a line or no line, and that can be re-pointed at whatever the supply does next.

An aptamer is a short single strand of DNA selected to bind one small molecule. It is synthesised rather than raised in an animal, it is stable at room temperature, and changing what a sensor detects means changing the sequence rather than rebuilding the instrument.

Aptastat is the reader. The recognition chemistry is the part that swaps.

Label-free faradaic EIS, and why the signal is a resistance

The surface

A gold working electrode carrying thiolated aptamer strands backfilled with mercaptohexanol, with one target molecule bound inside the middle strand. aptamer target bound MCH gold working electrode

The circuit

A Randles equivalent circuit: solution resistance R sub s in series with a parallel combination of a constant-phase element and R sub ct in series with a Warburg element. Rs CPE Rct W the model the spectrum is fitted to

The readout

Two Nyquist semicircles from one electrode. The bound state has the larger diameter; the difference is bracketed and labelled delta R sub ct. Rs ΔRct bound baseline Z′ / Ω −Z″ / Ω
  1. 01

    The surface.

    A thiolated aptamer is self-assembled onto a gold working electrode and backfilled with mercaptohexanol. The instrument checks that the monolayer actually formed by comparing a cyclic voltammogram against the bare-gold scan taken earlier on that same electrode — a monolayer that failed to form looks like bare gold, which is exactly what the comparison measures.

    aptastat/web/plan.py — technique “verify_sam”

  2. 02

    The probe.

    The cell contains a ferri/ferrocyanide redox couple in supporting electrolyte. Electrons move between it and the electrode at a rate the surface controls.

    DESIGN.md §4

  3. 03

    The measurement.

    A small-signal AC excitation — 10 mV rms by default — is swept across frequency and the complex impedance recorded at each point. Binding at the surface obstructs electron transfer, and that obstruction appears as a rise in charge-transfer resistance: the diameter of the semicircle on a Nyquist plot.

    aptastat/web/plan.py — ac_amplitude_mv

  4. 04

    The readout.

    The spectrum is fitted to a Randles equivalent circuit. What is reported is the change in Rct against a baseline taken on that same electrode, differenced against a scrambled-sequence control channel.

    app/README.md

What this section is careful about.

Label-free EIS is sensitive to everything that changes an electrode surface, not only to binding. That is why the scrambled control channel, the per-electrode baseline and the monolayer check are parts of the measurement rather than options in it. A number this instrument prints without them is not a result, and it will say so rather than print one.

What the box actually does

Techniques
Twelve: impedance spectroscopy, cyclic voltammetry, square-wave voltammetry, chronoamperometry, electrode clean, monolayer verification, baseline capture, replicates, titration, time course, self-test, QC self-check. The instrument builds every setup form from these declarations, so a parameter this hardware does not have cannot appear on the screen. aptastat/web/plan.py — SPECS
Frequency
0.0448 Hz to 160 kHz, log-spaced, up to 4,096 points in one sweep. The bounds are not written down: they are derived at import from the firmware’s own band table and rounded inward, so the form cannot offer a frequency the shim will refuse. aptastat/web/plan.py — _band_bounds() · aptastat/backends/eis_bands.py
Working ceiling
About 150 kHz. The 160 kHz figure is the top band’s DFT Nyquist; above roughly 150 kHz a metered resistor reads visibly low, and the instrument says so in the field’s own help text rather than quoting the higher number. aptastat/web/plan.py — f_start_hz help text
Excitation
0.1 to 600 mV rms; 10 mV default. aptastat/web/plan.py
Transimpedance
Two ladders, mirrored from the firmware’s C tables rather than assumed: eight rungs, 200 Ω to 160 kΩ, on the impedance path; twenty-six rungs, 200 Ω to 512 kΩ, on the voltammetry path. A requested value off the ladder is snapped to the nearest rung, and the run records the value used, not the value asked for. aptastat/backends/rtia.py
Front end
Analog Devices AD5940 (EVAL-AD5940ELCZ) on a Raspberry Pi 5 over SPI0. DESIGN.md §1–2 · POWER.md §3.1
Electrodes
Four positions in the shipped configuration: three sensing and one differential control at index 3, switched by an ADG5208 8:1 analog multiplexer. The backend accepts mux positions 0 through 7; four is a configuration, not a hardware ceiling. app/config.yaml · aptastat/backends/ad5940.py
Runtime
About 5.4 hours calculated on a ~50 Wh 2S2P pack at a 7.5 W system average, on a 90 % usable / 90 % conversion basis. That is a power budget, not a battery test. The pack sits under the 100 Wh airline carry-on limit. POWER.md §4
Software
One Python codebase for the instrument’s 7-inch panel, the desktop application and the installable phone app, against one API.

The app on this page is the instrument’s own screen

  • It saves first. The run is on the instrument’s own card before anything is queued to go anywhere. The network is a second destination, never a dependency — a run taken in a van with no signal is saved exactly as durably as one at a bench on fibre. What the queue holds is a pointer, not a payload, so a crash mid-upload cannot lose a run; and a run that cannot be uploaded is reported rather than quietly dropped.

    aptastat/cloud/outbox.py

  • It opens with no signal. Install it on a phone home screen and it opens to the runs you last looked at — labelled as cached, rather than presenting month-old runs as current. Arming, starting and stopping are never cached: a stored “armed” would be a lie about custody of a physical instrument.

    aptastat/web/static/sw.js

  • Colours, icons and the web manifest are generated at request time from one palette file, so the icon on somebody’s home screen cannot drift from the mark on the instrument’s own display. A test pins the two together.

    aptastat/web/icons.py

One door, and the instrument holds it.

An Rct is a fit, and a fit can fail to support the number it produces. On an Aptastat exactly one piece of code decides whether that number gets printed, and it runs on the instrument, at the moment of the measurement. What it decided is stored with the run, and it is what every screen shows afterwards — this app, the instrument’s own panel, the desktop application. Nothing here recomputes anything. Where the fit did not support a figure you see that it was withdrawn, rather than a browser’s guess at what it might have been.

The mirror holds the instrument’s own read-out, not the raw material for someone else’s.

aptastat/summary.py, module docstring

What it has been measured doing

Everything in this section was taken on metered resistive standards, not on a cell. Read it as a statement about the measurement core.

0.57 % |Z| median %CV

Sixteen repeat sweeps, 2026-09-07, on a metered resistor.

+0.2 % accuracy at 1 kHz

Read 9,855.7 Ω against a declared 9,840 Ω.

noise-like Kramers–Kronig residual

No drift, across the same spectra.

app/AUDIT-2026-09.md §1 · aptastat/analysis/diagnostics.py — spectrum_spread, kk_test

And the figure that was wrong for two weeks

For two weeks this project’s stated blocker was that repeat sweeps spread about 20 %, against a binding signal of about 12 %. The conclusion drawn from it — that no aptamer result would mean anything until the hardware improved — was wrong, and it cost two weeks.

The 20 % was the spread of Rct, a fitted parameter, measured on a pure resistor. A resistor has no charge-transfer arc for Rct to describe, so fitting Rs + Rct∥CPE + Warburg to a plain resistance is unidentifiable by construction, and the fit had said so all along: across the eight sweeps of 2026-09-08 the one-sigma uncertainties ran as high as 1.24 × 109 Ω. The code computed them correctly and the store persisted them. Nothing displayed them.

Recomputed on |Z|, a quantity that exists in that load, the same stored sweeps spread 0.57 %.

Two things changed as a result, and both are in the instrument rather than in a document. A diagnostics module was added so dispersion is computed on a quantity that exists in the load being measured. And the standing rule is now written down: before believing a dispersion figure, check what quantity it was computed on and whether that quantity is identifiable in the load.

app/AUDIT-2026-09.md §1

What has not been demonstrated

This instrument has a verdict called INDETERMINATE. It means measured, cannot be judged, and it exists so that a run the analysis cannot support is never reported as one it can. It is not a shade of WARN: WARN is a real reading in the equivocal band and asks the operator to treat the sample as suspect, while INDETERMINATE asks them to re-prep and re-run the electrode. It keeps its Rct, reports no concentration, and can seed neither a baseline nor a control reference. The same standard applies to this page.

app/README.md — Verdicts

No binding data on this instrument.

Every figure in the section above was taken on resistive and dummy-cell loads. No aptamer-modified electrode has been measured here. The assay is unproven on this device, and producing that first binding curve is the next thing the work has to do.

app/AUDIT-2026-09.md §1

Impedance at a controlled DC potential is not available on the present electrode path.

On the evaluation board’s M1 electrode path the EIS front end drives the cell open-loop: the LPDAC sets a voltage at VBIAS0 and nothing servos CE0 to make the cell follow it. Measured across a scan, Ecell = 0.987 · Erequested − 0.438 V — an offset roughly three times larger than the whole requested range — and a node survey has CE0 walking at about 106 mV per hour, with Ecell following it at about −103 mV per hour. The instrument therefore ships with its bias at 0.0 V, measures the standing potential rather than asserting one, and badges the run UNBIASED-OFFSET. The ohm axis is unaffected and good to about 0.7 % on a metered resistor; what is unknown is where on the potential axis the spectrum was taken. For a resistive load that costs nothing. For the aptamer assay it is not yet good enough, because Rct is read at a chosen potential and this front end does not choose one. The fix is a topology change — time-multiplexed bias, as ADI’s own ECSns_EIS does — and it cannot be validated on a resistor, which has no double-layer capacitance to coast on. Voltammetry is unaffected: those techniques run on the low-power loop, where the potentiostat amplifier is closed.

app/config.yaml — sweep.dc_bias_v · app/pi-ad5940-shim/README.md §§131, 1504–1517

The benzodiazepine aptamer has never been used as an electrochemical sensor.

20DF42 (Samuelian & Baum, Analysis & Sensing 2022, 2(6):e202200044) was selected in solution by Capture-SELEX and read out by fluorescence polarisation. Nobody has immobilised it as a thiol monolayer and measured binding electrochemically — including us. Any plan that reaches an electrode therefore has to put a solution-phase affinity gate in front of it.

ANALYTE_PANEL.md §§19, 84

“Benzodiazepine” is a class, and this aptamer does not cover it.

20DF42 binds the 1,4-diazepam family — diazepam, nordiazepam, temazepam, oxazepam, alprazolam — with Kd in the 0.2–0.6 µM range. It shows no binding to lorazepam or clonazepam, and there is no published data for the designer benzodiazepines (etizolam, bromazolam, flualprazolam, clonazolam) that dominate the current illicit supply. A channel labelled “benzodiazepine” would falsely reassure on a sample containing one the sensor is blind to. A channel is therefore labelled by the analyte it was calibrated against and the analogues it is documented to see, or it is not labelled.

ANALYTE_PANEL.md §§30, 101

The shipped instrument names no analytes.

Its channel configuration ships with every analyte field empty, on purpose. Three example channels were removed in September 2026 because they were examples and not a panel anyone had validated on this instrument. An analyte name is what binds a calibration curve to a channel, and a curve that converts a resistance change into a concentration for a substance nobody calibrated against is the one way this device will print a confident number it has not earned.

app/config.yaml — channels

The SBIR is not awarded.

An NIH/NIDA Phase I (R43) application is in preparation for the 5 January 2027 deadline. No work described on this page was funded by it.

Safety and disclaimer

This is an early proof-of-concept for research and harm-reduction contexts. It is not a certified medical or forensic device. Readouts depend on aptamer selectivity, probe chemistry and per-device calibration; treat WARN/DETECTED as screening indications, not confirmatory results, and confirm critical decisions with an orthogonal method.

app/README.md — Safety / disclaimer

Who is doing this

Founder, Aptaseek LLC

Ali Parvez — Electronics and PCB design, electrochemistry. Built the instrument, the firmware bridge and the software described on this page.

Saint Louis University

Dana Baum, Ph.D. — Aptamer chemist; senior author of the only published benzodiazepine aptamer selection. SELEX and aptamer chemistry are a named subaward, not in-house work.

On data

The cloud mirror holds specimen codes, never identities — no name, no medical record number, no date of birth. There is no self-registration; an administrator creates accounts. Results are displayed for a specimen code rather than as a clinical interpretation for a patient. Runs are stored as the instrument wrote them, byte for byte, so the desktop application reads back exactly what the device held rather than a re-serialisation of it. Records are retained for ten years by default, which is what the data-management plan quotes.

infra/mirror.yaml · app/DESK-AND-CLOUD.md §1

It does not drive your instrument. Setting up and starting a run happens on the instrument’s own network, by someone who can see the cell. A stop button on a page with no instrument behind it is an invitation to believe there is one.

aptastat/web/static/app.js

If you are reading this to decide something

  • Programme officers and reviewers — the Phase I aims, the preliminary data behind the figures above and the data-management plan are available on request.
  • Collaborators with an aptamer — if you have a sequence with solution-phase affinity data and want to know whether it survives as a surface, that is precisely the question this instrument was built to answer.
  • Clinicians and harm-reduction programmes — we are not ready for a field pilot. We would like to talk to you about what one would have to prove first.
Write to admin@aptaseek.com