{% extends "base.html" %} {% block title %}{% if s %}Edit {{ s.name }}{% else %}New search{% endif %}{% endblock %} {% block body_class %}is-task{% endblock %} {% macro sec(id, ic, title, sub) -%}
{{ ui.icon(ic) }}

{{ title }}

{{ sub }}

{{ caller() }}
{%- endmacro %} {% macro fold(id, ic, title, summary, open=False) -%}
{{ ui.icon(ic) }}{{ title }}{{ summary }}{{ ui.icon("chevron-right") }}
{{ caller() }}
{%- endmacro %} {% set E = errors %} {% block content %}

{% if s %}Edit search{% else %}New search{% endif %}

{% if s %}Changes apply from the next check. Listings you already got are not sent again.{% else %}Paste a search from Vinted, or build one here. The first check skips what's already there, so only new listings alert you.{% endif %}

{% if E %} {% endif %}
{% call sec("what", "search", "What you're looking for", "The words and category Vinted searches for.") %}
{{ ui.field_error(E, "link") }}

On Vinted, search and set your filters, then copy the address (in the app: Share, then Copy). Pasting a link replaces the filters below. Works without https:// too.

{% if s and not f.link %}

Now: {{ s.url }}

{% endif %}
{{ ui.field_error(E, "name") }}
{{ ui.field_error(E, "tld") }}
{{ ui.field_error(E, "search_text") }}

What you'd type in Vinted's search box.

Category

{% if f.catalog_ids %}{{ f.catalog_ids.split(',')|length }} picked.{% else %}Any category.{% endif %}{% if not builder %} The category picker works while the app runs.{% endif %}

{{ ui.field_error(E, "include_terms") }}

Each chip must be in the title. To accept either of two words, type them with "or" between: 501 or 505.

{{ ui.field_error(E, "banned_keywords") }}
{{ ui.icon("chevron-right") }}Advanced
{{ ui.field_error(E, "regex") }}
{{ ui.field_error(E, "max_age_min") }}

Paid bumps of old listings are always skipped.

{% endcall %} {% call sec("price", "badge-percent", "Price", "Prices here include Vinted's buyer protection fee, so they match what you'd pay before shipping.") %} {% if link_price %}
{{ ui.icon("info") }}

From your Vinted link: {{ link_price }}. Vinted applies that one, before its fee. You only need the fields below for a limit that includes the fee.

{% endif %}
{{ currency }}
{{ ui.field_error(E, "min_total_price") }}

Optional

{{ currency }}
{{ ui.field_error(E, "max_total_price") }}

Including fees

Only send dealsSkip anything that isn't clearly cheaper than usual for this search.{% if typical %} The typical price right now is {{ typical|join(", ") }}.{% else %} The typical price is worked out once this search has found about 15 listings.{% endif %}
% cheaper
{{ ui.field_error(E, "deal_only_pct") }}
{% endcall %} {% call sec("item", "shirt", "The item", "Leave anything empty to allow all. Not every listing says its size or condition; those still come through.") %}
{% for code, key, label in [("size", "size_ids", "Sizes"), ("status", "status_ids", "Condition"), ("color", "color_ids", "Colours")] %}
{{ label }}
{% if f[key] %}{{ f[key].split(',')|length }} picked.{% else %}Any.{% endif %}{% if code == "size" %} Pick a category first for its sizes.{% endif %}
{% endfor %} {% endcall %} {% call sec("where", "bell", "Where alerts go", "Tick where this search sends. Tick none and it sends to every place you've added.") %}
{% for dd in dests %} {% else %}

No places yet, so finds only show on your Finds page. Add your phone, Telegram or Discord.

{% endfor %}
{% endcall %} {% set quiet_sum = ("quiet " ~ f.quiet_start ~ " to " ~ f.quiet_end) if f.quiet_on else "no quiet hours" %} {% call fold("when", "clock", "When to check", ("every " ~ (f.interval|int // 60) ~ " min" if f.interval|int >= 60 else "every " ~ f.interval ~ " s") ~ " · " ~ quiet_sum, open=E.interval or E.quiet_start or E.quiet_end) %}
Check
{% set chosen = f.interval|string %} {% for v in presets %} {% endfor %} {% if chosen|int not in presets %}{% endif %}
{{ ui.field_error(E, "interval") }}

Vinted shows new listings a few minutes late, so checking faster than every minute rarely helps and can make Vinted slow you down.

Quiet hoursNo buzzing at night. Times are in your time zone, {{ timezone }}.
{{ ui.field_error(E, "quiet_start") }}
{{ ui.field_error(E, "quiet_end") }}
During quiet hours {% for v, t, dsc in [("hold", "Save for the morning", "Sent together when quiet hours end"), ("silent", "Send without sound", "Arrives now, silently"), ("drop", "Don't send", "Still shown on Finds")] %} {% endfor %}
{% endcall %} {% set seller_parts = [] %} {% if f.seller_min_rating %}{% set _ = seller_parts.append(f.seller_min_rating ~ " stars or more") %}{% endif %} {% if f.seller_min_reviews %}{% set _ = seller_parts.append(f.seller_min_reviews ~ " reviews or more") %}{% endif %} {% if f.skip_unrated_sellers %}{% set _ = seller_parts.append("no brand-new sellers") %}{% endif %} {% if f.countries %}{% set _ = seller_parts.append("in " ~ f.countries|join(", ")) %}{% endif %} {% call fold("seller", "user", "The seller", seller_parts|join(" · ") or "Any seller", open=E.seller_min_rating or E.seller_min_reviews or E.countries) %}

Vinted's search doesn't say much about sellers, so these need a quick look at each new seller's page. Alerts can arrive a few seconds later.

{{ ui.field_error(E, "seller_min_rating") }}
{{ ui.field_error(E, "seller_min_reviews") }}
Skip brand-new sellersSellers with no reviews yet.
Seller lives in none ticked means anywhere
{% for tld, code, cname in countries if code != "US" %}{% endfor %}
{{ ui.field_error(E, "countries") }}

Handy to keep shipping cheap and quick.

{{ ui.icon("ban", "i-xs") }} {{ blocked_count }} {{ "seller is" if blocked_count == 1 else "sellers are" }} blocked in every search. Manage blocked sellers

{% endcall %} {% call fold("countries", "globe", "Other countries", ("Also on " ~ f.extra_tlds|map("string")|join(", ")) if f.extra_tlds else "Only vinted." ~ f.tld, open=E.extra_tlds) %}

Run the same search on other Vinted sites. More countries means more finds, but higher shipping and more chance Vinted slows you down.

{% for tld, code, cname in countries if tld != f.tld %}{% endfor %}
{{ ui.field_error(E, "extra_tlds") }} {% endcall %} {% call fold("look", "palette", "Look", ("Tags: " ~ f.tags) if f.tags else "Colour, tags and notes", open=E.color or E.tags or E.notes) %}
Colour tells searches apart in Finds and Discord
{% for hex in slots %}{% endfor %} {% if f.color and f.color|upper not in slots %}{% endif %}
{{ ui.field_error(E, "tags") }}
{{ ui.field_error(E, "notes") }}
{% endcall %} {% call fold("resale", "tag", "Resale", ("Resells for " ~ currency ~ f.resale_price ~ (", at least " ~ currency ~ f.min_margin ~ " left" if f.min_margin else "")) if f.resale_price else "For resellers: only alert when the margin is worth it", open=E.resale_price or E.resale_fee_pct or E.resale_shipping or E.min_margin) %}

Fill this in if you buy to resell. Alerts then show what you'd keep after the selling platform's cut and postage, and can skip anything that leaves too little. Amounts are in vinted.{{ f.tld }}'s currency.

{{ currency }}
{{ ui.field_error(E, "resale_price") }}
%
{{ ui.field_error(E, "resale_fee_pct") }}

0 for Vinted, about 10 for eBay.

{{ currency }}
{{ ui.field_error(E, "resale_shipping") }}

Leave empty if the buyer pays it, as on Vinted.

{{ currency }}
{{ ui.field_error(E, "min_margin") }}

Optional. Needs the resale price.

{% endcall %}
Cancel
{% if s %}
{% endif %}
{% endblock %} {% block modals %} {% if s %}
{% endif %} {% endblock %}