Tabu Methodology Overview
After the individual Tabu users complete a tailored questionnaire, their responses are stored in Google BigQuery for efficient processing and future use. Once processed, the data is transferred to Google Looker Studio, where it is transformed into clear and visually engaging reports.
Individual users can update their information every three months. When updates are made, the most recent data is used for all calculations. If a user confirms that their data remains unchanged, their previously submitted information is retained. To ensure accuracy, date filters in the dataset prioritize the latest entry for each individual, regardless of the time frame being analyzed.
To calculate average salaries, only data within three standard deviations of the overall salary distribution and above the minimum wage is considered. Years of experience and team size—key metrics users provide—are grouped to prevent the possibility of identifying individuals.
Salaries are displayed exactly as entered, without adjustments for the number of working days, ensuring transparency in representation.
Tabu applies a bullshit filter to exclude certain entries from salary comparisons, ensuring the reliability of results. The following types of data, among others, are removed:
- Extremely high salaries reported with Junior seniority levels.
- Exceptionally high salaries listed under student contracts.
- Salaries below the minimum wage unless tied to a student contract.
- Email addresses associated with flagged or suspicious domains.
- Entries deemed suspicious based on specific patterns or irregularities.
This filtering process helps maintain the integrity and accuracy of the dataset.
By default, only data entered or updated within the last 18 months is included, as older entries are deemed outdated and less relevant for accurate comparisons.
Default filters
For the individual users, the default filters are set to include only the entries matching the following criteria:
- the individual's position based on the second survey question,
- the individual's seniority, if applicable,
- the individual’s country of salary,
- the individual’s contract type,
- salary entered or updated within the last 18 months.
For business users, the default filters are much the same, whether they are comparing their own employees or looking at the general market.
Net and Gross 1 Salaries in Tabu
Unfortunately, over 60% of Croatians do not fully understand gross salary. Instead of considering their gross salary—their official, total salary before taxes and contributions—they focus only on the amount they receive in their bank accounts each month. They call this "net" salary, even though it often includes additional tax-free allowances, such as transportation, meals, and performance bonuses, further adding to the confusion.
To address the widespread lack of understanding about gross salaries, Tabu initially allowed users to enter only their "net" salary, asking them to provide the total amount they receive each month, including allowances. However, as of March 21, 2023, gross salary entries are also supported. Users are asked whether they know their gross 1 salary. If they do, they provide both their net salary with allowances and their gross 1 salary. If not, they enter only their net salary with allowances, and Tabu calculates their gross 1 salary based on several parameters, as can be seen below. If you'd like to learn more about gross salary and how it’s calculated, check out our webinar with Toni Milun (in Croatian).
This is why the default setting on the Tabu platform is to look at net salaries with allowances—it’s mandatory for individuals to enter it, and most communicate in it anyway.
Approximate Gross 1 salary calculation
Croatia
For entries from 2022 and 2023, the following formula is applied:
((((salary - 132) - 763) * (1 / (1 - (case when salary - 132 >= 3981 then 0.3 else 0.2 end * (tax / 100) + case when salary - 132 >= 3981 then 0.3 else 0.2 end)))) + 763) * 1.25
For entries from 2024, the following formula is applied:
((((salary - 132) - 840) * (1 / (1 - case when salary - 132 >= 4200 then higher_rate else lower_rate end))) + 840) * 1.25
For entries from 2025 onwards, the following formula is applied:
((((salary - 132) - 900) * (1 / (1 - case when salary - 132 >= 5000 then higher_rate else lower_rate end))) + 900) * 1.25
Explanation:
- 132 is the rounded tax-free allowance (average),
- 763, 840, and 900 are the average personal deductions (for 1 child, without dependents or disabilities),
- 0.2 and 0.3 = 20% or 30% income tax,
- 1.25 is the conversion rate for pension contributions,
- surtax and lower/higher rates are taken from the place entered by the user,
- if surtax or lower/higher rates are unknown, the system uses Zagreb’s rates.
Serbia
The formula used to convert net salaries to gross in Serbia is as follows:
(salary - 21.35) / 0.701
Explanation:
- 21.35 is 2500 RSD in EUR
- 0.701 is the number that encompasses all taxes for the current year.
Bosnia and Herzegovina
The formula used to convert net salaries to gross in Bosnia and Herzegovina is as follows:
((salary - 153) + 22.95) / 0.58
Explanation:
- 153 is the deduction from the entered salary for allowances, i.e., transportation and meals. It assumes €200 for meals and €100 for transportation, converted to euros.
- 22.95 is the average personal deduction considered for one child, in euros.
- 0.58 is the conversion rate for 10% income tax and 32% contributions, averaged between FBiH and RS.
OpenAI personalized advice
To generate personalized salary increase advice, the OpenAI API was used. A Data Protection Agreement with OpenAI ensures GDPR compliance. Anonymized data was sent to the API to generate advice - these data do not include unique identifiers.
For each user with updated salary data, advice was individually requested based on their unique identifier.
Advice is updated periodically, especially after a new update. OpenAI does not use TABU data for any other purpose, such as improving its LLM.
OpenAI prompt used for generating advice:
You have access to market salary data.
The salaries listed are monthly net or gross salaries: "salary" field is monthly net salary with monthly allowances, "salary_bruto" field is monthly gross salary.
You will be provided with a JSON description of a single user marked with a unique_id - this user is referred to as Advisee.
Compare the Advisee with the market based on the provided data. Recognize the users in the market salary data that have a higher salary than the Advisee and note the differences in data between the Advisee and the users in the market salary data.
You can write and execute Python code by enclosing it in triple backticks, e.g. ```code goes here```. Use this to perform calculations.
Your task is to generate a single-sentence advice on increasing their salary. The advice must be written in English.
Compare the Advisee to others on the same position, seniority, company_salary and contract_type.
The advice must be realistic, e.g. advise another company type or size, a change of contract type, if they should work in an IT company or not, attaining higher education.
The advice can't be that the Advisee should change their seniority or position. The advice must be addressed to the user, as it will be sent directly to them.
For developments positions, you can advisee the change of technology, if other technologies on the same positions and seniority are paid significantly more.
Pay attention to seniorities and years of experience.
If the Advisee is a female, check to see if her male colleagues of the same seniority are being paid more than her. If that's the case, advise her to talk about gender pay gap in her company.
Company type “Primarno vlastiti proizvod” means that’s a product company, while "Djelomično agencija i vlastiti proizvod” means it’s a company that’s partially an agency, and partially a product company.
Contact us!
Do you have questions related to the Tabu survey, your results or salary analysis? Let us know!