{% extends "base.html" %} {% block title %}{{ keyword.keyword }} — Willhaben Tracker{% endblock %} {% block title_in_topbar %}
{{ keyword.keyword }} {{ keyword.id[:8] }}
{% endblock %} {% block content %} {% if keyword %}

Configuration

Status
{% if keyword.is_active %} Active {% else %} Stopped {% endif %}
Polling Interval
{{ keyword.interval_minutes }}m
Subscribers
{{ subscriber_count }}
Users tracking this
Price Filters
{% if keyword.price_min %}€{{ (keyword.price_min / 100)|round(2) }}{% else %}0{% endif %} to {% if keyword.price_max %}€{{ (keyword.price_max / 100)|round(2) }}{% else %}Max{% endif %}
Postcodes Filter
{{ ', '.join(keyword.allowed_postcodes) if keyword.allowed_postcodes else 'Any' }}
Last Successful Scrape
{% if keyword.last_scraped_at %} {{ keyword.last_scraped_at.strftime('%m/%d %H:%M') }} {% else %} Never {% endif %}

Recent Matches

{% if ads %}
{% for ad in ads %} {% endfor %}
Ad Location Link
{{ ad.title }}
{{ format_price(ad.price) }} {% if ad.published_at %} {{ ad.published_at.strftime('%m/%d %H:%M') }} {% endif %}
{% if ad.postcode %}{{ ad.postcode }} • {% endif %} {{ ad.location or '—' }}
Open
{% else %}

No ads found for this keyword yet.

{% endif %}

Scrape Telemetry

{% if logs %}
{% for log in logs %} {% endfor %}
Execution Time Result Throughput Diagnostics
{{ log.scraped_at.strftime('%Y-%m-%d') }}
{{ log.scraped_at.strftime('%H:%M:%S') }}
{% if log.status == 'success' %} Success {% elif log.status == 'rate_limited' %} Blocked {% else %} Error {% endif %}
{{ log.ads_found }} scanned {{ log.new_ads }} new
{{ log.error_message or '—' }}
{% else %}

No telemetry recorded yet.

{% endif %} {% endif %} {% endblock %}