Rules & Merchants

Rules are applied during import and can also be used to update existing analyzed rows. User rules override system rules.

How rules work

When you upload a file, Pinke normalizes the raw rows (building a full-text search blob and detecting merchants via aliases). When you analyze, the pipeline applies: user rules → merchant defaults → system rules → ML fallback → review queue. User rules always win.

Example
Input: Text contains "grundsteuer b"
Rule applied: system.housing › housing.tax.grundsteuer_b
Result: category=housing, subcategory=tax, group=fixed_costs
Text matching: contains vs. matches

contains — Simple substring search (case-insensitive). "aws" matches "AWS Emea Luxembourg"

matches (regex) — Regular expression pattern for advanced matching.

Pattern Matches Use case
amzn.*mktp AMZN MKTP DE S1234 Wildcard between words
paypal.*\d{4} PAYPAL REF 8812 Match digits (\d = digit)
(rewe|aldi|lidl) REWE SAGT DANKE Match any of several words

Tip: Use contains for simple keywords. Use regex only when you need wildcards or alternatives.

Your rules

Personal rules that override system rules. Supports text, merchant, and amount matching.

0 / 7
No user rules yet.

System rules

Read-only rules grouped by category.

Categories: 23, Subcategories: 53

Fixed Costs

Housing – Broadcast Fee, Electricity, Heating, Rent, Storage, Tax, Waste, Water
housing.utilities.stadtwerke
When the text matches 'stadtwerke'
Set
group fixed_costs,
category housing,
subcategory electricity
and tags fixed_costs, housing, utilities, contract
housing.tax.grundsteuer_b
When the text matches 'grundsteuer\s*b'
Set
group fixed_costs,
category housing,
subcategory tax
and tags housing, contract
housing.rent
When the text matches 'miete|wohnraum|kaltmiete|warmmiete|wohnen|wohnbau'
Set
group fixed_costs,
category housing,
subcategory rent
and tags fixed_costs, housing, contract
housing.utilities.broadcast.gez
When the text matches 'Rundfunk\s+Ard|Zdf|Dradio|Beitragsservice'
Set
group fixed_costs,
category housing,
subcategory broadcast_fee
and tags fixed_costs, housing, fees
housing.utilities.heating.btb
When the text matches '\bBTB\s+Energie\b'
Set
group fixed_costs,
category housing,
subcategory heating
and tags fixed_costs, housing, utilities
housing.utilities.waste
When the text matches 'abfall|abfallgeb(ü|ue)hren|m(ü|ue)ll'
Set
group fixed_costs,
category housing,
subcategory waste
and tags fixed_costs, housing, utilities
housing.utilities.water_wab_panke_finow
When the text matches '(wasser-?\s+und\s+abwass|panke\s+finow)'
Set
group fixed_costs,
category housing,
subcategory water
and tags fixed_costs, housing, utilities
housing.utilities.heating_btb
When the text matches '\bbtb\s+energie\b'
Set
group fixed_costs,
category housing,
subcategory heating
and tags fixed_costs, housing, utilities
housing.storage.selfstorage
When the text matches '(selfstorage|dein\s+lagerraum)'
Set
group fixed_costs,
category housing,
subcategory storage
and tags fixed_costs, housing, utilities
housing.utilities.vattenfall
When the merchant is Vattenfall and the amount is negative
Set
group fixed_costs,
category housing,
subcategory electricity
and tags fixed_costs, contract
housing.rent.degewo
When the merchant is Degewo and the amount is negative
Set
group fixed_costs,
category housing,
subcategory rent
and tags fixed_costs, contract
Telecom – Mobile & Internet
telecom.mobile_internet
When the text matches '(\baldi\s*talk\b|\be-?plus\b|\bfreenet\b|\bprepaid\b|\bvodafone\b|\btelekom\b|\bdsl\b|\bkabe…
Set
group fixed_costs,
category telecom,
subcategory mobile_internet
and tags telecom, mobile, internet, communication
telecom.hosting.strato
When the merchant is STRATO and the amount is negative
Set
group fixed_costs,
category telecom,
subcategory mobile_internet
and tags fixed_costs, contract
Tax – Income Tax
tax.finanzamt
When the text matches 'finanzamt|steuernummer'
Set
group fixed_costs,
category tax,
subcategory income_tax
and tags obligations, contract
Insurance – Car, General, Life
insurance.ergo
When the text matches 'lebensvers'
Set
group fixed_costs,
category insurance,
subcategory life
and tags fixed_costs, contract
insurance.auto.allianz_direct
When the text matches 'allianz direct vers\. ag'
Set
group fixed_costs,
category insurance,
subcategory car
and tags car, fixed_costs, contract
insurance.universa
When the text matches 'uniVersa'
Set
group fixed_costs,
category insurance,
subcategory life
and tags fixed_costs, contract
insurance.health.general
When the text matches 'versicherung'
Set
group fixed_costs,
category insurance,
subcategory general
and tags fixed_costs
Health – Refunds
refund.health.tk
When the text matches 'Techniker\s+Krankenkasse' and the amount is positive
Set
group fixed_costs,
category health,
subcategory refunds
and tags refund, health

Daily Life

Housing – Furnishing, Maintenance, Refunds
housing.maintenance.ikea
When the merchant is IKEA and the amount is negative
Set
group daily_life,
category housing,
subcategory furnishing
and tags housing
refund.housing.ikea
When the merchant is IKEA and the amount is positive
Set
group daily_life,
category housing,
subcategory refunds
and tags housing, refund
housing.maintenance.hagebaumarkt
When the merchant is hagebaumarkt and the amount is negative
Set
group daily_life,
category housing,
subcategory furnishing
and tags housing
housing.maintenance.jysk
When the merchant is JYSK and the amount is negative
Set
group daily_life,
category housing,
subcategory furnishing
and tags housing
housing.maintenance.baumarkt.obi
When the merchant is OBI and the amount is negative
Set
group daily_life,
category housing,
subcategory maintenance
and tags housing
housing.maintenance.baumarkt.toom
When the merchant is TOOM and the amount is negative
Set
group daily_life,
category housing,
subcategory maintenance
and tags housing
Food – Casual Dining, Dining, Fast, Fast Food, Kids Meals
food.casualfood
When the text matches 'casual.?food|casualfood|Mauerblumchen|Swing.Kitchen|Madlen.Eis|CUCCISGESUNDBRUNNEN'
Set
group daily_life,
category food,
subcategory casual_dining
and tags leisure, personal
food.fastfood.mcdonalds
When the merchant is McDonalds
Set
group daily_life,
category food,
subcategory fast
and tags food
food.restaurant.generic
When the text matches 'restaurant'
Set
group daily_life,
category food,
subcategory dining
and tags leisure
food.restaurant.generic2
When the text matches 'Milagro|GOLDENER.STERN|Ratskeller'
Set
group daily_life,
category food,
subcategory dining
and tags leisure, restaurant
food.fast.grumpy
When the text matches 'grumpy.duck|THANG.LONG|Ditsch|Esswirtschaft|BURGER.KING|FRANZIS.OHOH'
Set
group daily_life,
category food,
subcategory fast_food
and tags dining, fast_food
food.casualfood.bakery
When the merchant is Bäckerei
Set
group daily_life,
category food,
subcategory casual_dining
and tags food
food.restaurant.bella
When the merchant is Ciao Bella
Set
group daily_life,
category food,
subcategory dining
and tags leisure
food.kids.meals
When the text matches '(essengeld)'
Set
group daily_life,
category food,
subcategory kids_meals
and tags kids, contract
Groceries – Discounter, Organic, Supermarket
groceries.supermarket
When the text matches 'kaufland|Supermarkt|Markt'
Set
group daily_life,
category groceries,
subcategory supermarket
and tags food
groceries.supermarket.edeka
When the merchant is EDEKA
Set
group daily_life,
category groceries,
subcategory supermarket
and tags food
groceries.supermarket.rewe
When the merchant is REWE
Set
group daily_life,
category groceries,
subcategory supermarket
and tags food
groceries.discounter
When the text matches '(lidl|aldi|\bnetto\b|\bpenny\b)'
Set
group daily_life,
category groceries,
subcategory discounter
and tags food, budget
groceries.organic
When the text matches '(naturkost|\bbio\b|biomarkt|denn.?s|bio company|alnatura|naturkaufhaus)'
Set
group daily_life,
category groceries,
subcategory organic
and tags food, organic
Drugstore – Personal Care, Pharmacy
drugstore.personal_care
When the text matches '(\bdm\b|rossmann|müller|mueller|budni|drogerie|wolkenseifen)'
Set
group daily_life,
category drugstore,
subcategory personal_care
and tags health, hygiene
drugstore.pharmacy
When the text matches '(apotheke|apotheken|apotheker)'
Set
group daily_life,
category drugstore,
subcategory pharmacy
and tags health, pharmacy
drugstore.pharmacy2
When the merchant is Apotheke
Set
group daily_life,
category drugstore,
subcategory pharmacy
and tags health, pharmacy
drugstore.vision.fielmann
When the text matches 'fielmann|AUGENOPTIK'
Set
group daily_life,
category drugstore,
subcategory pharmacy
and tags personal, health
Car – Fuel, Maintenance, Parking, Tax
car.fuel
When the text matches '(avia|shell|esso|aral|\btank(?:stelle)?\b|total.?service.?station)'
Set
group daily_life,
category car,
subcategory fuel
and tags car, transport
car.fuel.esso
When the text matches '\bEsso\b'
Set
group daily_life,
category car,
subcategory fuel
and tags car, esso
car.parking.parkovaci_kasy
When the merchant is Parkovaci kasy and the amount is negative
Set
group daily_life,
category car,
subcategory parking
and tags parking, travel, foreign, debit_card
car.parking
When the text matches '(\bparken\b|\bparkhaus\b|\bparkplatz\b|\btiefgarage\b|\bp\+r\b)'
Set
group daily_life,
category car,
subcategory parking
and tags parking, car, transport
car.workshop.amw
When the text matches 'AMW-?Automobilwerkstatt'
Set
group daily_life,
category car,
subcategory maintenance
and tags car
car.maintenance.garage
When the text matches 'automobil.*werkstatt|auto.*service'
Set
group daily_life,
category car,
subcategory maintenance
and tags car, unexpected
car.tax.kfz_steuer
When the text matches 'kfz[-\s]?steuer'
Set
group daily_life,
category car,
subcategory tax
and tags car, contract
Shopping – Kiosk, Online, Postage, Refunds, Stationery
shopping.postage.deutsche_post
When the text matches '(deutsche\.?post|\bdhl\b)' and the amount is negative
Set
group daily_life,
category shopping,
subcategory postage
and tags —
shopping.stationery.mcpaper
When the text matches 'mcpaper|MAeC.GEIZ' and the amount is negative
Set
group daily_life,
category shopping,
subcategory stationery
and tags kids, education
shopping.kiosk.eckert
When the merchant is Eckert and the amount is negative
Set
group daily_life,
category shopping,
subcategory kiosk
and tags kiosk, local, debit_card
shopping.online.amazon_marketplace
When the text matches 'AMZN Mktp|AMZN\.Mktp|Amazon\.de' and the amount is negative
Set
group daily_life,
category shopping,
subcategory online
and tags shopping
shopping.online.amazon_prime
When the text matches 'AMAZON.PRIM|AMAZON' and the amount is negative
Set
group daily_life,
category shopping,
subcategory online
and tags shopping, prime, abo
refund.amazon
When the text matches '\bamazon\b|amzn' and the amount is positive
Set
group daily_life,
category shopping,
subcategory refunds
and tags refund
refund.paypal
When the text matches 'PayPal' and the amount is positive
Set
group daily_life,
category shopping,
subcategory refunds
and tags refund
Leisure – Subscriptions
leisure.subscriptions.prime_video
When the text matches 'prime\.?video' and the amount is negative
Set
group daily_life,
category leisure,
subcategory subscriptions
and tags leisure
Transport – Bike, Public Transport
transport.public
When the text matches 'Deutsche Bahn|\bDB\b|BVG|MVG|RMV|HVV|VRS|VBN|HBF'
Set
group daily_life,
category transport,
subcategory public
and tags —
transport.public.sbahn
When the text matches 's.bahn'
Set
group daily_life,
category transport,
subcategory public
and tags —
transport.sbahn.berlin
When the text matches 's\s?bahn\s+automat\s*b'
Set
group daily_life,
category transport,
subcategory public
and tags —
transport.bike.workshop
When the text matches 'fahrradwerkstatt|bike\s*werkstatt'
Set
group daily_life,
category transport,
subcategory bike
and tags —
transport.db.deutschlandticket
When the merchant is Deutschlandticket
Set
group daily_life,
category transport,
subcategory public
and tags mobility, contract
transport.vbb.entgelte
When the text matches 'vbb|voebb'
Set
group daily_life,
category transport,
subcategory public
and tags mobility
transport.ride_hailing.bolt
When the merchant is BOLT and the amount is negative
Set
group daily_life,
category transport,
subcategory public
and tags mobility
transport.ride_hailing.uber
When the text matches '\buber\b|uber\s*\*|uber\s+trip' and the amount is negative
Set
group daily_life,
category transport,
subcategory public
and tags mobility
transport.ride_hailing.lyft
When the text matches '\blyft\b|lyft\s*\*' and the amount is negative
Set
group daily_life,
category transport,
subcategory public
and tags mobility
transport.ride_hailing.grab
When the text matches 'grabcar|grab\s*ride|grabtaxi|grab\s*\*' and the amount is negative
Set
group daily_life,
category transport,
subcategory public
and tags mobility
transport.ride_hailing.ola
When the text matches 'ola\s*cabs|olacabs' and the amount is negative
Set
group daily_life,
category transport,
subcategory public
and tags mobility
transport.ride_hailing.didi
When the text matches 'didi\s*ride|didi\s*mobility|\bdidi\b' and the amount is negative
Set
group daily_life,
category transport,
subcategory public
and tags mobility
Clothing – Fashion, Refunds, Shoes
refund.clothing
When the text matches 'H&M|H.M.|C.A.|HUMANA|deichmann|reno|vinted|ernsting' and the amount is positive
Set
group daily_life,
category clothing,
subcategory refunds
and tags refund
clothing.h_and_m
When the text matches 'H&M|H.M.|C.A.|HUMANA|DER.AUSSTEIGER' and the amount is negative
Set
group daily_life,
category clothing,
subcategory fashion
and tags personal
clothing.fashion.tkmaxx
When the merchant is TK Maxx and the amount is negative
Set
group daily_life,
category clothing,
subcategory fashion
and tags clothing, retail, debit_card
clothing.shoes.deichmann
When the text matches 'deichmann|reno|kiss' and the amount is negative
Set
group daily_life,
category clothing,
subcategory shoes
and tags personal
clothing.fashion.vinted
When the text matches '(\bvinted\b|mgp\*vinted)' and the amount is negative
Set
group daily_life,
category clothing,
subcategory fashion
and tags —
clothing.fashion.general
When the text matches 'ernsting.s.family|Kraemer.Pferdesport|Sporthaus.Olympia' and the amount is negative
Set
group daily_life,
category clothing,
subcategory fashion
and tags personal

Family

Education – Tuition
education.alice_salomons
When the text matches 'alice\s+salomon\s+hochschule'
Set
group family,
category education,
subcategory tuition
and tags fixed_costs, contract

Fun Lifestyle

Gifts – Flowers, General
gifts.flowers.blume2000
When the merchant is Blume 2000
Set
group fun_lifestyle,
category gifts,
subcategory flowers
and tags —
gifts.general.nanu_nana
When the merchant is NANU.NANA
Set
group fun_lifestyle,
category gifts,
subcategory general
and tags gifts
Charity – Donation
charity.spende
When the merchant is Donation
Set
group fun_lifestyle,
category charity,
subcategory donation
and tags giving
Leisure – Books, Gambling, General, Subscriptions, Wellness
leisure.books.buchhandlung
When the text matches 'buchhandl'
Set
group fun_lifestyle,
category leisure,
subcategory books
and tags education
leisure.gambling.lotto
When the text matches 'lotto'
Set
group fun_lifestyle,
category leisure,
subcategory gambling
and tags —
leisure.wellness.sonnenstudio
When the merchant is Sonnenstudio and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory wellness
and tags leisure
leisure.aquarium.erkner
When the merchant is Aquarium Erkner and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory general
and tags aquarium, local, debit_card
leisure.subscriptions.netflix
When the text matches '\bnetflix\b' and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory subscriptions
and tags subscription, entertainment, abo
leisure.subscriptions.spotify
When the text matches '\bspotify\b' and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory subscriptions
and tags subscription, entertainment, abo
leisure.subscriptions.disney_plus
When the text matches 'disney\s*(\+|plus)' and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory subscriptions
and tags subscription, entertainment, abo
leisure.subscriptions.youtube_premium
When the text matches 'youtube\s*premium|google\s*\*?\s*youtube' and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory subscriptions
and tags subscription, entertainment, abo
leisure.subscriptions.hotstar
When the text matches 'hotstar|jiohotstar|disney\+\s*hotstar' and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory subscriptions
and tags subscription, entertainment, abo
leisure.subscriptions.anghami
When the text matches '\banghami\b' and the amount is negative
Set
group fun_lifestyle,
category leisure,
subcategory subscriptions
and tags subscription, entertainment, abo
Sports – Equipment
sports.decathlon
When the text matches 'decathlon'
Set
group fun_lifestyle,
category sports,
subcategory equipment
and tags leisure, health
Vacation – Trip
vacation.sweden
When the text matches 'stockholm|musko|nynashamn|torslanda|visby|skans|bromma|nacka|norrmalm|SFBB'
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags —
vacation.accommodation.ferienhof
When the text matches 'Ferienhof'
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.accommodation.djh
When the text matches 'djh|jugendherberge'
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.hotel.generic
When the text matches 'hotel'
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.accommodation.airbnb
When the text matches 'airbnb' and the amount is negative
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.accommodation.booking
When the text matches 'booking\.?com|booking\s*b\.?v\.?' and the amount is negative
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.accommodation.agoda
When the text matches '\bagoda\b|agoda\.?com' and the amount is negative
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.accommodation.trip_com
When the text matches 'trip\.?com|ctrip' and the amount is negative
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation
vacation.accommodation.oyo
When the text matches '\boyo\b|oyo\s*rooms' and the amount is negative
Set
group fun_lifestyle,
category vacation,
subcategory trip
and tags vacation

Finance & Misc

Transfer – P2P, Wallet
transfers.wallet.paypal_topup
When the text matches '(paypal\s*\(europe\)|paypal\s+europe|paypal)' and the text matches
Set
group finance_misc,
category transfer,
subcategory wallet
and tags —
transfers.p2p.paypal_visa_direct
When the text matches '(visa\.direct|^PAYPAL\.\.)'
Set
group finance_misc,
category transfer,
subcategory p2p
and tags —
Banking – Cash Deposit, Cash Withdrawal
banking.cash_withdrawal.generic_atm
When the text matches '\b(sparkasse|volksbank|raiffeisen)\b' and the text matches 'd…
Set
group finance_misc,
category banking,
subcategory cash_withdrawal
and tags —
banking.cash_deposit.sb_einzahlung
When the text matches 'sb-?einzahlung' and the amount is positive
Set
group finance_misc,
category banking,
subcategory cash_deposit
and tags cash, deposit, atm
Savings – Savings Out
transfers.savings.internal
When the text matches 'de23100123450351479101' or the text matches 'de97120300001201…
Set
group finance_misc,
category savings,
subcategory savings_out
and tags transfer, transfer_out, savings
Transfer In – Transfer In
transfers.transfer_in.internal
When the text matches 'de23100123450351479101' or the text matches 'de97120300001201…
Set
group finance_misc,
category transfer_in,
subcategory transfer_in
and tags transfer, transfer_in
Income – Child Benefit, Salary
income.salary
When the text matches 'gehalt|lohn|einkommen' and the amount is positive
Set
group finance_misc,
category income,
subcategory salary
and tags —
income.kindergeld
When the text matches 'familienkasse'
Set
group finance_misc,
category income,
subcategory child_benefit
and tags —