Find Official Company Data for Invoicing on Bizi.si

Site bizi.siTask find-official-company-data-for-invoicingVersion v2Updated Sep 1, 2026Category business research

Resolve a Slovenian company by name on Bizi.si and extract its official invoicing details from the company profile. This skill was captured from a live agent session on bizi.si and is published here as a reusable recipe for agents.

NoteSelectors and URL schemes drift as sites change. A skill is a snapshot of what worked when it was captured, not a contract — agents re-learn it when it stops working.

Find the Bizi.si company profile for a supplied company name and extract the official business details useful for issuing an invoice, including the legal name, address, registration identifiers, VAT status, and bank-account information when displayed.

Use Cases

Use when the caller provides a company or organization name but not its Bizi.si profile URL or opaque company identifier. This recipe resolves the profile through Bizi.si search before extracting data.

Automation Flow

  1. Navigate directly to https://www.bizi.si/iskanje?q={url-encoded-company-name}.
  2. On the search results page, resolve the profile URL without guessing an identifier. Prefer the result anchor matching a[id*="_linkCompany"]; otherwise inspect company-result anchors whose href matches ^/[^/?#]+/$. Choose the result whose visible name, after whitespace/case normalization, matches the requested legal name most closely. The observed result control embeds an opaque numeric company identifier (for example, a value in the link-control id), but the identifier should be read from the result rather than fabricated.
  3. Navigate directly to the resolved absolute profile URL, typically https://www.bizi.si/{company-slug}/, and run the evaluator below in that page context. Return only the requested company’s profile data, preserving displayed values and noting fields that are absent or masked.

Evaluator:

(() => {
const clean = s => (s || '').replace(/\u00a0/g, ' ').replace(/\s+/g, ' ').trim();
const visible = el => !!el && (el.offsetWidth || el.offsetHeight || el.getClientRects().length);
const out = { companyName: '', address: '', postalCode: '', city: '', registrationNumber: '', taxNumber: '', vatStatus: '', bankAccounts: [], labeledData: {}, sourceUrl: location.href };
const bodyText = clean(document.body.innerText);
const h = [...document.querySelectorAll('h1,h2')].find(visible);
out.companyName = clean(h?.textContent) || clean(document.querySelector('meta[property="og:title"]')?.content).replace(/\s*[|–-].*$/, '');

const put = (label, value) => {
  label = clean(label).replace(/:$/, ''); value = clean(value);
  if (!label || !value || value === label) return;
  out.labeledData[label] = value;
  const l = label.toLowerCase();
  if (/dav(č|c)na|tax/.test(l)) out.taxNumber ||= value;
  else if (/mati(č|c)na|registration/.test(l)) out.registrationNumber ||= value;
  else if (/naslov|address|sede(ž|z)/.test(l)) out.address ||= value;
  else if (/po(š|s)tna|postal/.test(l)) out.postalCode ||= value;
  else if (/kraj|mesto|city/.test(l)) out.city ||= value;
  else if (/ddv|vat/.test(l)) out.vatStatus ||= value;
};

document.querySelectorAll('table tr').forEach(tr => {
  const cells = [...tr.querySelectorAll('th,td')].filter(visible).map(x => clean(x.innerText));
  if (cells.length >= 2) put(cells[0], cells.slice(1).join(' | '));
  const joined = cells.join(' | ');
  if (/TRR|IBAN|ban(č|c)ni ra(č|c)un|account/i.test(joined)) out.bankAccounts.push(joined);
});
document.querySelectorAll('dt').forEach(dt => {
  const dd = dt.nextElementSibling;
  if (dd && dd.matches('dd')) put(dt.innerText, dd.innerText);
});
document.querySelectorAll('li,p,div').forEach(el => {
  if (!visible(el) || el.children.length > 3) return;
  const t = clean(el.innerText), m = t.match(/^([^:]{2,60}):\s*(.+)$/);
  if (m) put(m[1], m[2]);
});
const accountPattern = /(?:SI\d{17}|HR\d{19}|AT\d{18}|IBAN\s*[:]?\s*[A-Z]{2}[0-9A-Z ]{10,})/gi;
out.bankAccounts.push(...(bodyText.match(accountPattern) || []));
out.bankAccounts = [...new Set(out.bankAccounts.map(clean).filter(Boolean))];
return out;
})()

Possible Friction Points

  • Bizi.si uses a separate /iskanje?q=... search route and company profile slugs such as /{COMPANY-SLUG}/; the profile is reached through an opaque result identifier rather than a predictable identifier supplied by the company name.
  • Do not construct an opaque company id from the name. Read the selected result’s href (or its link-control id) and then navigate to that profile.
  • Search results may include similarly named entities. Match the legal name and, when available, the displayed legal suffix and address before selecting a result.
  • The evaluator is intentionally tolerant of Bizi.si table, definition-list, and label/value layouts; verify that the selected profile heading belongs to the requested company. Bank-account rows may be partially hidden or unavailable without appropriate access.
  • Treat the extracted values as displayed business information and retain the profile URL as the source for the invoice record.

Call it

GET https://production-sfo.browserless.io/skills?token=TOKEN-HERE&domain=bizi.si&task=find-official-company-data-for-invoicing