{% extends "base.html" %} {% block title %}Listing run · foilstack{% endblock %} {% block status %}{{ card_count }} cards · {{ rows|length }} listings · {{ rule_obj.name }} · {{ run_value|money }} at list{% endblock %} {% block screen %}

Listing run

{{ card_count }} card{{ '' if card_count == 1 else 's' }} {% if rows|length != card_count %}· {{ rows|length }} listings{% endif %} {% if selected_ids %}· selected{% else %}· whole inventory{% endif %}
Back to inventory {# Both buttons count what they would change, not what is on screen, and both name the channels they would change it on. The count alone is ambiguous the moment a second channel is ticked: "Mark 6" against six rows already reading "listed · tcgplayer" looks like a bug until you notice the eBay box, and the number moves when you tick it. "Mark 6 on TCGplayer" rather than "Mark 6 as listed on TCGplayer", which is what this said first: the bar is captured at 1000px for the README animation and the landing hero, and the longer pair wrapped it onto two rows there. The verb it loses is in the title and in the pills the button produces, and the shorter form reads as the exact undo of the button beside it — which the longer one did not. #} {# Shown only when there is something on a picked channel to take off it. No disabled twin, unlike the button beside it: "nothing here is listed" is already what a live Mark button and an empty status column say. #} {% if unmark_ids %} {% endif %} {% if mark_ids %} {% else %} {% endif %}
Channels
{% for c in channels %}
{{ c.name }}
{{ c.note }}
{% if c.exporter %}
{{ c.exporter.columns|length }} columns · {{ c.exporter.filename }}
{% endif %}
{% endfor %}
A channel here is a CSV format, not a connection. Nothing is sent to a marketplace on your behalf. You download the file and upload it yourself.
Pricing rule
{% for r in rules %}
{{ r.name }}
{{ r.formula }}
{% endfor %}
Applied on top of the condition discount. “Low + $0.01” is an approximation: the catalogue gives a market price, not the current lowest listing.
floor   {{ floor|money }}
{# "at list", not "listed value": on this screen "listed" now means a row marked as being on a marketplace, and the same word for the run's total at list price made the summary read as the value of the marked half. #}
at list   {{ run_value|money }}
vs market   {{ '+' if delta >= 0 }}{{ delta|money }}
Download
{% for c in channels %} {% if c.on and c.exporter %} {% if c.match_href %}
Needs your own Export Filtered CSV from TCGplayer’s pricing screen: their ids name a card and a condition, so only their file has them. Your quantities in it are not read.
{% else %} {{ c.exporter.label }} CSV {% endif %} {% endif %} {% endfor %}
{% for r in rows %} {% endfor %}
CARD SKU CND QTY MARKET LIST PRICE STATUS
{{ r.name }} {{ r.sku }} {{ r.condition }} {{ r.quantity }} {{ r.market|money if r.market is not none else '—' }} {{ r.list_price|money if r.list_price is not none else '—' }} {% if r.listed_partly %}{{ r.listed_count }} of {{ r.quantity }} listed · {{ r.listed_channels }} {% elif r.listed %}listed · {{ r.listed_channels }} {% else %}ready{% endif %}
{% if not rows %}
nothing selected · pick rows on the inventory screen
{% endif %}
Job log
{% for l in log %}
{{ l.t }}  {{ l.msg }}
{% else %}
nothing yet this session
{% endfor %}
{% endblock %} {% block scripts %} {% endblock %}