We often use refractometers to measure total dissolved solids (TDS) of coffee, but these instruments don’t measure TDS directly. Instead, they measure the refractive index of the liquid—a characteristic related to the speed of light in the liquid—and then estimate TDS using an empirical relationship between refractive index and TDS.
This relationship between refractive index and TDS is different for different compounds and solutions, as demonstrated by the following plot.

Solutions of two different compounds, at different concentrations, can have the same refractive index. This means a refractometer would give the same result for these two solutions, even though they have different concentrations, because it is actually measuring refractive index.
This raises a question: Do things like the varietal and roast level of coffee affect this relationship? Data from Illy’s “Espresso Coffee: The Science of Quality” suggests they do. Table 8.1 in the book includes the following data:
Pure arabica | Pure robusta | |
Refractive index of filtrate at 20 °C | 1.339 | 1.339 |
Total solids of filtrate (mg/ml) | 52.5 | 58.2 |
This is shown graphically in the following plot.

The solid line here shows the relationship assumed by the DiFluid R2 Extract refractometer. At a refractive index of 1.3390, the DiFluid would indicate a TDS of 3.40%, but Illy’s data suggests the true TDS of the arabica coffee would be 4.64%, and of the robusta 5.44%. That’s a big difference.
To test this, in this experiment, we will look at the relationship between TDS and refractive index for four coffees with different origins, varietals, and roast levels.
As usual, I have uploaded my results and analysis to GitHub.
Acknowledgments
I am very grateful for the assistance of Phil & Sebastian Coffee Roasters, who supplied the coffee used in this experiment, and in particular to Phil and Rowan, who prepared the espresso.
When I first proposed this experiment, I’m sure none of us realized that it would take 9 hours over 3 days to prepare the espresso. However, we wanted to make sure the samples used here were representative of each coffee, so there was a lot of tasting and fine tuning to achieve this.
Without further ado, let me present the coffees we selected.
Coffees
For this experiment, we selected four coffees representing different origins, varietals, and roast levels.

From left to right, these are:
- Rosellis Herrera: Honduras; bourbon and pacas; washed; orange, plum, and nougat; roasted December 1; 202 °F at group; 19 g in, 41 g out, 30-35 s
- Rukira AA: Kenya; SL28; washed and double-fermented; grapefruit, peach, and molasses; roasted December 1; 201 °F at group; 19 g in, 41 g out, 30-35 s
- The Standard: Costa Rica, Central Valley; white honey process; walnut, cane sugar, and chocolate; roasted November 30; 202 °F at group; 19 g in, 41 g out, 30-35 s
- The Doppelgänger: Same coffee and process as The Standard, but a darker roast; roasted December 1; 200 °F at group; 19 g in, 41 g out, 30-35 s
As an inexperienced taster, I can offer only broad tasting notes for these coffees, but I think it’s worth underscoring that there were significant differences in taste that were clear even to me.
The Rosellis Herrera and Rukira AA sat on the sweeter end of the spectrum, with flavours dominated by fruit and pleasant acidity. With the Rukira AA in particular, the grapefruit note was very clear to me.
The Standard and The Doppelgänger are more typical espressos. For me, these have a broader flavour skewing more toward bitter notes rather than fruit. The Doppelgänger is more developed, and brings out more smoky/roasty notes.
Notably, all of these coffees are arabica varieties, and none of them is an extremely light or dark roast. However, I believe they are representative of a range of coffees where a refractometer would typically be used, and given the large differences noted by Illy, I expect to see some difference here.
Equipment
The following equipment was used to prepare the espresso:
- Nuova Simonelli Mythos grinder
- Duomo The Eight distribution tool
- Simple hand tamper with convex face
- Modified Synesso Hydra espresso machine
- 50 ml centrifuge tubes
The samples were filtered using the following equipment:
- Chemex bonded filters
- Double Rings 102 qualitative filter paper
- 90 mm Büchner funnel
- 250 ml filtering flask
- Hand vacuum pump
The samples were measured using two refractometers:
- VST Lab Coffee III
- Pre-production DiFluid R2 Extract
Finally, the samples were weighed and oven dried using the following equipment:
- A 0.01 g scale similar to this one
- AWS Gemini-20 milligram scale
- Heathrow Scientific HD14521A aluminum weighing boats
- Chemex bonded filters cut and shaped into coils
- Household convection oven
Method
The experiment was carried out over three days (December 5-7), with each day following a similar routine.
Sample preparation
First thing in the morning, two shots each of the four coffees were prepared at Phil & Sebastian by either Phil or Rowan. On the first day, grind size and temperature were established for each coffee, with the goal of optimizing that coffee’s taste. On subsequent days, the same temperature was used as on the first day, and only the grind setting was adjusted in order to maintain the same shot parameters (output weight and shot time), with tasting to confirm that the shot was representative for each coffee.
Equipment preparation
The samples were transported back to my home in 50 ml centrifuge tubes. Upon arrival, the tubes were placed in a room temperature water bath while 25 weighing boats were prepared.

Following the suggestion of Mitchell, each weighing boat was fitted with a small coil of filter paper to reduce drying time. This was made by cutting a double-thickness 1/2″ strip of Chemex filter paper, then wrapping the strip tightly around a small cardboard dowel. The strip was then removed from the dowel and placed in the weighing boat.

With the strip of filter paper in place, the weighing boats were placed in the oven at 100 °C for 30 minutes to dry. All 25 weighing boats were then removed from the oven, weighed, and placed back in the oven.
The zero on both refractometers was checked at this point and each was calibrated if necessary. In addition, the milligram scale was calibrated using 10 g and 20 g calibration weights, then the calibration was checked using 10 g and 2 g weights.
Unfiltered samples
Next, one sample tube for each coffee was moved to the fridge. The other sample tube was shaken and 10 ml of liquid was removed. This was measured using the procedure described below (see “Measurement procedure”).
Filtered samples
The remaining portion of each sample (approximately 30 ml) was filtered.
First, a small circle was cut from a Chemex filter, placed in a funnel, and the liquid was passed through the filter. When the filter clogged, another filter was prepared and the remaining liquid was poured through this filter.

Then, a 90 mm qualitative filter paper was installed in a clean Büchner funnel. This was washed with distilled water, then the funnel was installed in a filtering flask and a vacuum was applied using a hand pump until the water was gone. The funnel was removed, the flask was emptied, then the apparatus was reassembled. The sample was poured into the funnel, and again vaccum was applied using a hand pump until the entire sample had passed through the filter. The filtered sample was then moved from the flask to a small cup.

Next, the cup was placed on the 0.01 g scale and the scale was tared. At this point about 20 g of sample typically remained. Half the weight of the sample was removed and measured using the procedure desribed below (see “Measurement procedure”). Then the sample was topped up with distilled water so that the scale read aproximately 0 g. This procedure was repeated five times in total, so that measurements were obtained for the filtered sample as well as four dilutions of the sample.
Control sample
Finally, one sample boat was left empty as a “control” in order to measure the effect of drying without a sample present.
Measurement procedure
At the start of each measurement, the two refractometers were cleaned using distilled water and dried using a Kimwipe. Distilled water was added to each refractometer, the zero was checked, and both refractometers were again dried using a Kimwipe.
The calibration of the milligram scale was then checked using 10 g and 2 g weights.
An empty sample boat, with a strip of filter paper installed, was weighed using the milligram scale, then left on the scale.
Next, the sample was stirred and a 10 ml pipette was flushed three times with liquid from the sample container, to ensure that the contents of the pipette were representative of the sample.
The sample area of each refractometer was filled about half way from the pipette, then the remaining liquid in the pipette was placed in the sample boat. The full weight of the sample boat was immediately noted.

A measurement was made on each refractometer. The measurement was repeated until both refractometers had settled to within 0.01% TDS, usually two or three pushes of the button at full concentration, and often a single push for diluted samples.
Sample boats were moved into the oven in batches–when all coffees had been measured for the unfiltered samples, or when a single coffee had been measured for the filtered samples.
Oven drying
The 25 samples from each day’s experiment were arranged on a clean silicone pad on a flat tray, then placed in a convection oven at 100 °C. Aluminum foil was used to line the bottom of oven racks when a tray was placed underneath, in order to avoid having any debris contaminate the samples below.

Drying occurred over several days, with the oven being turned off when it was not possible to monitor it directly. Samples were weighed every few hours of drying as follows:
First, the milligram scale would be calibrated using 10 g and 20 g weights, then checked using 10 g and 2 g weights.
A tray of samples would be removed from the oven, then each sample boat would be moved to a room temperature stone countertop for a couple of minutes to cool.
The samples were weighed one at a time on the milligram scale, then returned to the tray. The calibration of the scale was checked every few measurements using 10 g and 2 g weights.
Once weighing was complete, the tray was moved back into the oven.

Results and analysis
The raw results of this experiment, as well as a Jupyter Notebook showing the details of my analysis, can be found on GitHub. In this post, I will summarize a few of the more interesting results of this analysis.
Change in empty weight of sample boats
One of the first things I noticed when looking at the results of this experiment is that the weight measured just after initial drying was not the same as the weight measured just before adding the sample to the sample boat.
To examine this change, I performed a small experiment where 5 aluminum weighing boats were prepared with coils of filter paper. These were placed into the oven for 2 hours, then left on the counter for 2 hours. The weight of the boat alone and the filter plus boat was recorded every 15 minutes. The following plot shows the result.

I have fitted each set of points with a pair of exponential curves. A single time constant (about 8 minutes) was used for the first curve in all pairs, and another time constant (about 14 minutes) was used for the second curve. This suggests that we would see significant change in weight when the sample boats are left on the counter even for just a few minutes.
How would this change affect the oven drying results? We calculate oven dried TDS as follows:
Since the full sample boat is weighed moments after the second empty measurement, the denominator in this expression should not be affected by changes in the weight of the filter paper. So any error caused by this change will appear only in the numerator:
Since the solution weight is similar between samples, this change should appear as an offset in the TDS figures:
This offset should be larger for weighing boats which spend more time out of the oven. Since we prepared the most diluted samples last, these should be the most affected. If we plot oven dried TDS vs. refractive index, we expect oven dried TDS to be zero at a refractive index of 1.3330, so we can check the data by confirming that this is the case.
DiFluid TDS vs. refractive index
We can start by plotting TDS vs. refractive index, both measured by the DiFluid refractometer. This doesn’t tell us anything about the samples, but it will tell us about the relationship the refractometer uses to convert from refractive index to TDS.

We can examine the quality of the fit by looking at the residual TDS for each point—that is, the difference between the measurement and the fit.

This is quite a good fit, since the residuals are less than half the DiFluid R2 Extract’s claimed accuracy of ±0.03% TDS.
It’s worth noting that this is probably not the actual fit used by the refractometer. Internally, the DiFluid likely uses a more complex fit based on the raw refractive index and temperature measurements. But this will give us a baseline for the next step.
Oven dried TDS vs. refractive index
Next, let’s look at a plot of oven dried TDS vs. refractive index.

We fit the whole data set with a single quadratic curve. Then we can look at the residual TDS, this time plotting each coffee separately.

The error bars in these plots show the 95% confidence interval for each measurement, based on uncertainty in the weight measurements used to calculate oven dried TDS.
The plot shows that any difference between the coffees is smaller than the uncertainty in this experiment, and probably smaller than the claimed accuracy of both the DiFluid R2 Extract and VST refractometers (about ±0.03% TDS).
As mentioned above, we can use the quadratic fit to check for any errors due to changes in the empty weight of our sample boats. The quadratic fit gives a TDS of -0.04% when refractive index is 1.3330, i.e., for distilled water. This offset is on the same order as the uncerainty in our oven dried TDS measurements, so there does not seem to be any indication that the change in weight has had a significant effect on these results.
Comparison with Illy and DiFluid TDS
Finally, we can compare oven dried TDS measurements with the results given by the DiFluid R2 Extract, and also with the results from Illy.

Oven dried TDS is very nearly 96% of the DiFluid measurement. Liang et al. calculate a volatilization ratio of a little over 2% for the coffee used in their experiment, so it seems plausible that the difference here is due to volatilization during oven drying, especially considering that our coffees were less than a week off roast.
Given how similar the results are for the coffees used in this experiment, it is difficult to account for the large difference between our results and Illy’s. Certainly, some of this could be due to differences in varietal (robusta vs. arabica) and roast level (perhaps the coffee used by Illy is a very dark roast), but I would have expected to see some suggestion of these differences in our results.
Conclusions
In this experiment, I used coils of filter paper to speed the drying process. In principle, this gives a more accurate measurement with less thermal degradation of the sample. However, in practice it seems as though the filter paper used here absorbs moisture quickly from the atmosphere, which could introduce error into the measurement.
Mitchell suggests other possible absorbents as well as filter paper coils. Materials like sand or celite may be worth exploring in future experiments.
In this experiment, we were not able to distinguish the four coffees in terms of TDS vs. refractive index. This surprised me, both because of the data reported by Illy, but also because the taste and smell of the four coffees were quite different. This underscores the crucial role of trace compounds in the sensory experience of coffee.
Finally, we noted that oven dried TDS measurements are about 96% of the value reported by the DiFluid R2 Extract. We have previously validated the instrument’s refractive index measurements using sucrose solutions, so it seems likely that the DiFluid refractometer’s TDS estimate includes volatile compounds which are lost during oven drying.