DEV Community

Maria-Luise Volkmar
Maria-Luise Volkmar

Posted on • Originally published at buchhaltungsbutler.de

Who actually feels lost about Germany's new automatic platform and crypto tax reporting? (a pandas cut)

Since January 2026, if you sell on eBay or Vinted, rent a room on Airbnb, or trade on Coinbase or Bitpanda, the platform now reports your income straight to the German tax office. Germany's Platform Tax Transparency Act (PStTG) and the crypto-side KStTG mean the numbers land at the Finanzamt whether you declare them or not. So here is a data question worth asking: now that the reporting is automatic, who actually feels confident about getting their own declaration right, and who feels completely lost?

I had a strong prior going in. Platform income and crypto are the natural habitat of digital natives, so I expected the youngest cohort to shrug this off and the oldest to struggle. A representative survey (Norstat, n = 1,010, January 2026) that shipped its raw numbers as an open CSV lets us check that prior instead of guessing. The answer flips the intuition on its head.

The headline figure

Across all respondents, 52.9% feel "rather unsure" or "totally overwhelmed" about correctly declaring this income. Only 16.1% feel in full command of it. So a bare majority of Germans are not confident they can file platform and crypto income correctly under the new rules.

That is the top line. The interesting part is where the discomfort concentrates.

Load the open data

The full survey is published as a CC BY 4.0 open dataset on GitHub. One CSV, one row per segment, values already as percentages of that segment.

import pandas as pd

url = (
    "https://raw.githubusercontent.com/DatapulseResearch/"
    "steuersuender-2026/main/data/tax_uncertainty_survey_2026.csv"
)
df = pd.read_csv(url)

print(df.columns.tolist())
# ['segment', 'base_n', 'full_overview_pct', 'secure_with_effort_pct',
#  'rather_unsure_pct', 'overwhelmed_pct']

print(df[df["segment"] == "Total"].T)
Enter fullscreen mode Exit fullscreen mode

Each row is a population segment (Total, the age bands 18-29 through 60-64, plus men and women), and the four *_pct columns are the confidence buckets, from "I have full overview" down to "totally overwhelmed, impossible without a professional".

Build a "struggling" column

Let me collapse the two low-confidence buckets into a single struggling measure (rather unsure + overwhelmed), then look at the age bands only.

df["struggling_pct"] = df["rather_unsure_pct"] + df["overwhelmed_pct"]

age_bands = ["18-29", "30-39", "40-49", "50-59", "60-64"]
by_age = (
    df[df["segment"].isin(age_bands)]
    .set_index("segment")[["overwhelmed_pct", "struggling_pct"]]
    .loc[age_bands]
)
print(by_age)
Enter fullscreen mode Exit fullscreen mode

Now the counterintuitive part. Watch the overwhelmed_pct column, the share who say the task is flat-out impossible without a professional, as age climbs:

age band overwhelmed_pct struggling_pct
18-29 15.8 54.5
30-39 7.4 50.0
40-49 15.0 50.3
50-59 22.9 54.6
60-64 25.0 55.5

The "totally overwhelmed" share does not fall as people get older. It rises steeply: from 7.4% at 30-39 to 25.0% at 60-64, more than a threefold climb. The digital natives are not the ones drowning. The people most likely to say they cannot do this without a professional are the oldest cohort, exactly the group you would not expect to be selling on Vinted or trading crypto in the first place.

You can see the gradient in one line:

gradient = by_age["overwhelmed_pct"]
print(gradient.to_string())
print("min -> max:", gradient.min(), "->", gradient.max())
Enter fullscreen mode Exit fullscreen mode

A second cut: the gender gap

The same struggling column, sliced by gender, gives a smaller but consistent gap.

gender = (
    df[df["segment"].isin(["men", "women"])]
    .set_index("segment")["struggling_pct"]
)
print(gender)
# women   55.4
# men     50.0
Enter fullscreen mode Exit fullscreen mode

Women report 55.4% unsure-or-overwhelmed against 50.0% for men, a 5.4 point spread. It runs the same direction as the age story: the confidence is not evenly distributed, and the groups you might assume are least exposed to platform and crypto income are not the most confident.

Why the intuition is wrong

My guess is that "confidence about declaring crypto and platform income" is not really a proxy for "uses crypto and platforms". It is a proxy for comfort with the German tax system under a new rule, and that comfort tracks age (and, more mildly, gender) rather than digital fluency. A 27-year-old who sells sneakers on eBay may not think twice about the paperwork; a 62-year-old who rents out a holiday flat sees an unfamiliar automatic-reporting regime and reasonably concludes they need help. The automation does not simplify the declaration, it just removes the option of it going unnoticed, and that is precisely what raises the anxiety in the groups least fluent in the process.

Data and method

  • Study: Digital Tax Transparency in Germany 2026 by BuchhaltungsButler, the full write-up with methodology and charts.
  • Open dataset (CC BY 4.0): DatapulseResearch/steuersuender-2026 on GitHub, including the exact tax_uncertainty_survey_2026.csv loaded above.
  • Survey: representative online panel by Norstat, n = 1,010 adults in Germany, fielded January 2026. Percentages are within each segment; segment base sizes are in the base_n column.
  • Reproduce: every number in this post comes from the four snippets above run against the raw CSV. Clone the repo, run them, and you should land on the same 52.9% headline, the 7.4 to 25.0 age gradient, and the 55.4 vs 50.0 gender split.

Community close

If you pull the CSV, I would be curious what you find in the secure_with_effort_pct column, the "I can manage but it takes real effort" middle group, which I did not touch here. Where does it peak, and does it fill in the gap left by the confident young and the overwhelmed old? Drop your cut in the comments.

Top comments (1)

Collapse
 
topstar_ai profile image
Luis

This is a really practical explanation of a problem that’s becoming more common as crypto regulation matures. The complexity of automatic reporting frameworks like DAC8 and platform-generated tax reports creates a gap between what users see and what tax authorities actually receive. I like the use of pandas as a lens—it reflects how most people end up wrestling with messy transaction data instead of clean summaries. What stands out is the operational burden shifting more onto individuals, even as reporting becomes “automated.” It would be interesting to see tooling that turns these regulations into truly transparent, user-verifiable workflows rather than just more compliance overhead.