Statistics methodology
How the numbers in the API statistics are produced and how to read them. The statistics are returned by the agenda stats in three outputs:
- ad statistics – time series and summary of a single ad (
/c/{dealer ID}/{moto|dily|prislusenstvi}/{ad ID}/stats, for a deleted ad/c/{dealer ID}/archive/…/stats), - dealer statistics – time series and summary of a dealer by section (
/c/{dealer ID}/stats), - ad table – totals for a period for the individual ads of one section (
/c/{dealer ID}/stats/{moto|dily|prislusenstvi}).
All three are based on the same counters and the same rules as the statistics in the dealer administration. This page summarises the rules in context; parameters, elements and examples are on the pages of the individual outputs. The statistics require the statsperm permission, for deleted ads too (the permission at the 'archive' level is not needed for them).
What is measured
- Ad metrics:
zobrazeni(ad detail views),vypis(impressions in result lists),urlKliknuti(click-through to the dealer's website),odpovedi(replies to the ad),schranka(saved to favourites),videoPrehraniandvideoDokoukano(video) and the blocksakcniOkno(promotion box, akční okno) andvybirame(the “Our pick” list on MotoInzerce.cz, Vybíráme z nabídky). They are in all three outputs. - Dealer metrics: the section
firma(pobocky,eshopy,stranky,formulare,poptavky,web) and, in the blocks,proklikFirma(click-through to the dealer name from the promotion box) andproklikLogo(click-through to the logo in the “Our pick” list). They concern the dealer, not an ad, so they are only in the dealer statistics.proklikFirmais only in the sectionmoto: the promotion box for parts exists only on the dealer subdomain (placement 2), where the click-through to the dealer name does not arise. - Where a metric arises: each metric arises only in some sections and placements (main website www.tipmoto.com, dealer subdomain, widget on the dealer's website, MotoInzerce.cz) – e.g. video only for motorcycles on the main website and on the subdomain, the promotion box for parts only on the subdomain. This is a property of the website, not of the dealer's traffic. A combination in which a metric does not arise is missing from the document, even if the client selects it with the
locationparameter. The full overview is in the metric catalogue. - The main number (text of the metric element) = people and unidentified visitors, without bots. Bots are in the attributes, see Bots.
Zero and not measured
0means “measured and nobody came”, a missing element means “not measured”. The counters do not record days with zero; the API adds a zero only where the metric was measured in that period, where it arises in that placement and section and (for an ad) where the ad existed, for video also where it had a video. Elsewhere the element is missing.- The
akcniOknoandvybirameblocks are output according to the catalogue, not according to traffic: for every placement where the block arises and where measurement took place, even without data – with zeros. A dealer that did not buy the promotion box in some placement sees a zero there. - The time series contains all periods of the range, even those without a single visit.
Coverage
What was measured when and where is described by the metriky block in each document, exactly for the data in the document (in the dealer statistics it is divided by section, because the coverage differs between sections). Coverage has three axes:
- Time:
od(first day with data of the metric for the chosen granularity; the ad table has no granularity and uses monthly totals before the daily data, so there, for example,zobrazenihasod2022-05-01, whereas the ad and dealer statistics withperiod=dayhave the start of the daily data),dopoctenoDo,merenoOd,robotiOdand the gaps in the datadira. - Placement: with the
locationfilter the metrics start on the day when measurement by placement started. The coverage by placement is in thepokrytielements: always for the promotion box and the “Our pick” list, for the other metrics only withbreakdown=location. - Existence: a metric that does not arise in the selected sections and placements is neither in the
metrikyblock nor in the data. For an ad this includes its lifetime, for video also whether the ad (dealer) had a video.
| Metrics | Data |
|---|---|
zobrazeni, odpovedi |
Reconstruction from backups (dopoctenoDo) until 28 August 2026, for odpovedi until 7 September 2026 (for accessories until 30 August 2026 and then a gap in the data 31 August – 7 September 2026); from 29 August 2026 or 8 September 2026 respectively, measurement by the new collection (merenoOd). Reconstructed values do not distinguish the placement (placement 0). |
vypis, promotion box, “Our pick” list, pobocky, eshopy, stranky |
From 29 August 2026. In placement 4 (MotoInzerce.cz) a gap in the data 15–16 September 2026. |
urlKliknuti |
From 4 September 2026, first day incomplete. |
schranka, formulare, poptavky, web |
From 7 September 2026, first day incomplete. |
videoPrehrani, videoDokoukano |
From 24 September 2026, first day incomplete; for an ad (dealer) only from the day it had a video, see Video. |
- Reconstruction and measurement are two methodologies. A jump in the series at the boundary
dopoctenoDo/merenoOdis a change of methodology, not of traffic. With thelocationfilter the reconstruction is not in the output (it does not distinguish the placement). - Data availability: daily data are available from the first day of the month 13 months ago (older ones are deleted; in September 2026 this is 1 August 2025). Older periods exist only in monthly totals – for
zobrazeniandodpovedifrom May 2022, for the other metrics from the month in which measurement started. The start of the daily data therefore moves every month. - A gap in the data (
dira) in all selected placements = not measured in the series. A gap in only one of the summed placements is not reported asdira; the affected periods haveneuplne="mereni".
Incomplete values
The neuplne attribute says that the value covers only part of the period or range, and why. Several reasons are separated by commas in this order:
| Reason | Meaning | Where it occurs |
|---|---|---|
rozsah |
The period (week, month) is cut off by the boundary of the range used. | only in the time series |
mereni |
The metric started to be measured in the period, has a gap in the data in it, or the period contains an incomplete first day of measurement; it is enough in one of the summed placements. For video also a period that contains days before the ad got the video (the day on which it got the video counts as a complete day). | series, summary, table row |
zivot |
The ad did not live for the whole period: it contains the insertion, the deletion or a gap between lifetime segments, or (in the ad table) the metric has data only outside the lifetime. | ad statistics and ad table; does not occur in the dealer statistics |
bezi |
The period has not ended yet – it contains today. | series, summary, table row |
- The value contains everything measured, including incomplete days (incomplete first day of measurement, today). The summary therefore equals the total of the time series.
dnicounts only complete days on which the metric was measured (and the ad existed) – without days in a gap in the data, without incomplete first days of measurement and without today. The day of insertion and deletion of an ad counts as a complete day.dniis in the summary for every metric, in a row of the ad table only for an incomplete metric.- The average
prumerDen(only in the summary) = total for the complete days /dni; incomplete days are not in it. A row of the ad table has no average, and value /dniis only an upper estimate of the average, because the value contains the incomplete days. - If the range consists only of incomplete days (e.g. only today or only the first day of measurement), the metric is output with its value,
dni="0"andneuplne, withoutprumerDen. - Today is always an incomplete day (
neuplne="bezi"): with the default range of the dealer statistics, the ad table and the statistics of an ad on the server (the last 28 days including today) every measured metric of the summary and of a table row has it. The default range of a deleted ad is its lifetime, so today is not in it.
Range
- The range is not snapped to whole weeks or months:
fromandtoare taken exactly, the boundary period of the series is cut off (neuplne="rozsah") and itsod/dogive the days actually covered. - The API only narrows the range, it never widens it. Procedure: 1. it fills in a missing
from/to(onlyfrom:to= today; onlyto:from=to− 27 days; without both, the default range of the output), 2. iffromis later thanto, it swaps them, 3. it narrows: atoin the future to today, afrombefore the start of the data to that start, for the ad statistics to the ad lifetime. - Narrowing to whole months: for periods older than the daily data only monthly totals exist. A boundary of the range in the middle of such a month is therefore narrowed inwards to whole months (snapping outwards would return numbers for days that were not requested). This applies to
period=monthin the ad and dealer statistics and always to the ad table. In the ad statistics a boundary in the month of insertion or deletion of the ad is not narrowed; the monthly total cannot be split into days, however, so such a month also contains any traffic outside the lifetime, see Ad lifetime. - The range actually used is in
rozsah/odandrozsah/do; if it differs from the requested one,rozsahalso containspozadovanoOd/pozadovanoDo. Swappingfromandtois not reported – the swapped values are taken as the requested ones.periodis always inrozsahof the ad and dealer statistics, never in the ad table (the table has no time series);location,breakdownandsectiononly when the parameters were used. - An empty range is not an error: if no day remains after narrowing (e.g. the range lies entirely before the start of the data or outside the ad lifetime), the output returns
200androzsahwithoutod/do, withoutmetriky, summary, series and records (nothing was measured). A client with a moving window thus does not get errors. - Time zone: all dates (
from,to,od,do,vlozeniCas,smazaniCas) and the day boundaries in the counters are in Europe/Prague time.
Ad lifetime
- The lifetime is determined only from records: from the ad on the server (insertion until today), from the record in the archive (insertion until deletion) and, for a re-published ad, from the data in the gap (see below). The statistics and the table always look up the lifetime with the dealer from the address.
- A re-published ad (deleted and later inserted again under the original ID) has several lifetime segments. It is one ad: the ad statistics return the same document on both paths and the ad table one row;
vlozeniCasis the first insertion. - Data in the gap: a second deletion is not recorded in the archive, so if the ad has data in the gap between deletion and the new insertion, it lived there in an unrecorded segment from the first to the last day with data, and those days are counted normally. Only the rest of the gap without data is not measured (missing from the series, not counted in
dni). Before the start of the daily data such a segment is derived from monthly totals by whole months. - With
period=dayandweekthe ad statistics add up only the days of the lifetime – the range is always cut to the lifetime, and outside it the metrics are missing. Withperiod=monthclosed months (even within the daily data) are taken whole from the monthly totals, because a monthly total cannot be split into days. In the month of insertion or deletion the total thus also contains traffic outside the lifetime (e.g. after deletion), andprumerDenis calculated from it. - A row of the ad table contains all data of the ad in the range, even outside the recorded lifetime (typically traffic after the deletion of the ad, mostly in the reconstructed history). A metric that has data only outside the lifetime has
dni="0"andneuplne="zivot". Thanks to this, the totals of the ad table match the dealer statistics and the administration, and nothing measured is hidden. For such ads, however, the ad statistics withperiod=dayorweekshow less than the ad's row in the table; withperiod=monththey may differ from it in either direction.
Bots
- The
roboti(bots) andaiRoboti(AI bots) attributes are next to the main number; the groups do not overlap, all visitors = value +roboti+aiRoboti. - The new collection separates bots from the first day of measurement (29 August 2026), so
robotiOd=merenoOdof each metric. In the reconstruction bots were subtracted by an older method and their number is not known, so reconstructed values have no bot attributes (roboti="0"would not be true). - When the attributes are missing: in the time series for a period that starts before
robotiOd. In the summary and in the ad table the start of the range of that metric decides (from, or the first day with data of the metric if later): the attributes are present only if bots were measured for the whole time for which the metric has a value – otherwise the share of bots would not have the same base as the value next to it. - In the ad table the start of the range of the document applies to all rows equally, not the insertion of the ad. An ad inserted after
robotiOdcan therefore have bot attributes in the ad statistics and none in a table whose range starts beforerobotiOd.
Video
- Only motorcycles, only placements 1 and 2, only in the
fullandcustom:detail.videoPrehrani= plays (all sources including YouTube),videoDokoukano= watched to the end (at least 90 % of the time actually played). - For YouTube only plays are measured; watching to the end and the viewing progress cannot be determined. An ad with a YouTube video only therefore has no
videoDokoukano. - Existence of the video: the video metrics exist only for days on which the ad had a video (for YouTube from the insertion of the ad, for a video uploaded to TipMoto from the day of upload, always at the latest from the first measured play). In the dealer statistics from the first day on which the dealer had a video for at least one ad (
videoDokoukanofrom the first video uploaded to TipMoto). - A deliberate simplification: the deletion of a video is not recorded anywhere, so after a video is deleted the video metrics show zeros until the end of the ad lifetime.
- 24 September 2026 (start of measurement) is an incomplete day. The
videoUdrzeniblock in the ad statistics does not include it, so itsprehranimay differ fromvideoPrehraniin the summary.
Promotion box and breakdown by placement
- The promotion box on the main website, on the dealer subdomain and on MotoInzerce.cz are three products that a dealer buys separately. The
akcniOknoblock is therefore always by placement (with thelokaceelement), even without a breakdown. breakdown=location(in the ad and dealer statistics) addsumisteniblocks to every period and to the summary and movesakcniOknoandvybirameinto them (the latter into the block of placement 4). They are then not in their original place. The totals across placements remain at the level of the period and the summary.- The ad table has no breakdown (
breakdownreturns406); theakcniOknoandvybirameblocks are in the row by placement, as in the ad statistics.
Three meanings of the stats element
- The root element
statsof the ad statistics – carries the ID of the ad. - The root element
statsof the dealer statistics – carries the ID of the dealer. Both documents have their own schema. - The
statsblock in an ad record (agendasmoto,dily,prislusenstviand their archive) – lifetime counterszobrazeni,odpovediandurlKliknuti; itsrefattribute leads to the ad statistics. The block does not require thestatspermpermission.
The lifetime counters need not match the statistics. They are kept separately: they count from the insertion of the ad, i.e. also for the time for which the statistics have no data, they do not distinguish periods or placements, and until September 2026 they were filled by an older collection. Expect the total of the time series over the whole ad lifetime to differ from the counter in the stats block.
Ad table
- Only ads with traffic in the range (in any metric of the section), including deleted ones (
archiv=1). You get ads without traffic by joining with the ad list/c/{dealer ID}/{moto|dily|prislusenstvi}. detailselects columns, not rows:summary,fullandcustom:always have the columnsid,idApi,nazev,archiv,vlozeniCasandsmazaniCas(they are not listed incustom:) and differ in the metrics;detail=idhas onlyid,idApiandarchiv. Rows and pages are the same for all levels.- A metric that was not measured is missing from the row (the ad did not exist at the time of measurement, the metric was not measured or the ad had no video). A filter does not find it (
filter=schranka = '0'does not return such a row) and it is not counted inrowCount. When sorting by it, the row is always at the end, in both directions; equal values are tie-broken byid, so pagination is stable. - Ads hidden from the export server (the “do not export” setting) are left out of the table, as from the ad list, so that the table can be joined with that list. This applies only to ads on the server – the archive does not hold this setting, so a deleted ad that was hidden appears in the table. The ad statistics return
404for a hidden ad on the server. The dealer statistics include hidden ads in the totals (a total reveals no individual ad). For the login of an export server from which the dealer hides some ads, the totals of the table therefore do not add up to the totals of the dealer statistics. - An ad that is no longer on the server nor in the archive has only
id(withoutref),archiv=1and the metrics in its row. It has no lifetime, its metrics follow only the coverage and do not have the reasonzivot. - Otherwise the totals of the table rows = the totals of the section in the dealer statistics for the same range and placements with
period=dayorweek. Withperiod=monththey may differ: the dealer statistics take closed months from the monthly totals, the table takes daily data within the daily data, see Deviations.
Deviations and deliberate simplifications
- Monthly and daily totals may differ. Monthly totals are a separate aggregation, not the sum of the daily data, and need not match it to the unit (e.g. for August 2026, for some dealers the monthly total is slightly higher than the sum of the days, never lower). By month (
period=month) closed months are taken from the monthly totals, so the total of a month may differ from the total of the same month by day. The ad table always takes daily data within the daily data and monthly totals only before them. - Ad statistics × ad table: for ads with data outside the recorded lifetime, the ad statistics with
period=dayorweekshow less than the table row, withperiod=monththey may differ in either direction, see Ad lifetime. The bot attributes may differ, see Bots. - An ID assigned to two dealers: exceptionally, the same ad ID was used in the past for two dealers. The statistics always belong to the dealer from the address and the ad lifetime is looked up only with that dealer; data outside that lifetime are in the ad table and in the dealer statistics, not in the ad statistics (as above).
- Days without data inside a lifetime segment derived from data (re-published ad) are zeros, as in any lifetime, even though the ad may have been temporarily unavailable then.
- A deleted video = zeros until the end of the ad lifetime, see Video.
English
- With
lang=enthe texts for people are in English:nazevandpoznamkain themetrikyblock, the comments in the XML and the error messages. - Data values are not translated – metric keys, element names, dates and numbers are the same in both languages. The placement names in the list
lokacestats(lokaceText) are data too and stay in Czech; the English meaning is in the XML comment above the element.
Formats and technical notes
- JSON: repeated elements are always arrays, attributes are sibling keys (
"zobrazeni@roboti") and all values are strings – in detail in the JSON paragraph of the ad statistics, the dealer statistics and the ad table. xpathreturns XML even for.json(as in the whole API).- HTML is a debugging view: the attributes (
roboti,aiRoboti,dni,prumerDen,neuplne) are not visible in it. Use XML or JSON to work with the numbers. - Elements, attributes and values may be added, see Extensibility.
