Verifying a Corporate Customer Before Extending Credit: A Companies Registry Workflow
Back to blog
automation·September 5, 2026·4 min read·By Yehonatan Saadia

Verifying a Corporate Customer Before Extending Credit: A Companies Registry Workflow

What the Israeli Companies Registry dataset tells you about a customer asking for payment terms, which fields exist, and how to turn it into a review trigger.

Key takeaways

  • The dataset holds hundreds of thousands of records; in the query we ran, the companies file reported a total of 730,574 records.
  • The fields relevant to a customer check are corporation status, sub-status, the violation flag, and the last annual report year filed.
  • The dataset says nothing about outstanding balances, payment history or ability to pay. It is a registration record only.
  • The check works as a trigger: it flags a customer who needs human eyes before payment terms are granted. It does not produce the decision.
  • This is an entirely different check from verifying a supplier before paying them, which is covered separately.

The Israeli Companies Registry is published as an open dataset on data.gov.il and can be queried by company number for corporation status, corporation type, a violation flag and the last annual report year filed. It answers whether the customer exists and in what registration state - not whether they can pay.

Why is this a different check from a supplier check?

Different questions, different data, different timing. A supplier check asks "how much tax to withhold and where to send the money", and it runs before money leaves you. This check asks "should I hand over goods or work before being paid", and it runs before money is meant to arrive.

The practical difference:

Supplier check before paymentCustomer check before credit
The questionHow much to withhold, where to sendWhether to deliver before payment
Primary sourceWithholding tax certificateCompanies Registry dataset
Critical valueThe certificate's validity dateRegistration state, and any change in it
What triggers itA payment runA request for terms, or a limit breach
What failure meansThe payment stopsThe order goes to human approval

The other side of that equation is covered in automated supplier verification in Israel, and there is no point duplicating it here - the two checks run at different points in the process and on different data.

What the dataset actually holds

In the query we ran against the companies file, the fields returned per record include:

  • Company number and company name, plus an English name where one exists.
  • Corporation type - for example an Israeli private company or a foreign private company.
  • Corporation status - among the values we saw: active, voluntarily liquidated, in voluntary liquidation, liquidated by merger, struck off.
  • Sub-status - empty in most records, and in some carrying values such as an order to open proceedings or an expedited voluntary liquidation.
  • Violation flag - empty, or carrying the violation value.
  • Last annual report year filed - a number, or empty.
  • Limitation - limited, unlimited, or unknown.
  • Incorporation date, address and country.
  • Parallel code fields for several of the textual fields, such as a status code and a violation code.

Note the field that does not exist: there is no financial data of any kind. No turnover, no balances, no payment history, no rating. Anyone expecting a number to compare against a credit limit will find it is not there.

How do you pull a single company from the dataset?

Access is through the CKAN API rather than the dataset's HTML page. Three things measured in practice:

  1. Find the resource. A package_show call with the dataset identifier returns the resource list, including the companies CSV and its resource id.
  2. Free-text search works. A datastore_search call with the q parameter and a company number returned 200 and a single record when the number exists, and a total of 0 when it does not.
  3. Filtering on a Hebrew field name did not. A datastore_search call whose filters key was in Hebrew returned, in our test, the site's error page with a 404 status, while the same call with the _id key returned 200.

A datastore_search_sql call also returned 404. The design conclusion: plan around q and around filters with ASCII keys, not around an SQL query or a filter keyed on a Hebrew field name. General working practices against the portal are covered in the data.gov.il API guide and in the Israeli company registry dataset.

From a trigger to a process, not to a score

The common mistake is trying to derive a score. What the dataset genuinely supports is marking when to stop and look:

  • A status other than active - any other value takes the customer off the automatic path.
  • A non-empty sub-status - a field that filled in is by definition an event.
  • The violation flag - present and binary, so a rule attaches to it cleanly.
  • An old annual report year - the gap between the recorded year and the current one is a measurable registration indicator.
  • A change between checks - the change matters more than the state. A customer who was active last quarter and is not now is the event worth reacting to.

The rule that holds up over time: the system flags, a person decides, and the decision is recorded with a date and a reason. Connecting that flag to the customer's actual debt position is covered in updating customer debt from a Masav return file.

What actually breaks

  • Matching by name. Names in the dataset sometimes appear in a different spelling, without gershayim or with a run-together form of the limited-company suffix. Matching has to be on the company number.
  • A customer that is not a company. A customer who is not an incorporated entity will not be in the dataset at all, and that is an absence of relevance rather than a negative finding.
  • Leading zeros. Company numbers stored as numbers rather than strings lose a digit on their way through a spreadsheet and come back as not found.
  • A static dataset. An open file refreshes on its own schedule, so the fetch date has to be stored alongside the result.
  • An empty field is not a "no". An empty violation field is not a statement that the company is fine; it is the absence of a flag. That distinction matters when the rule is written.
  • A record that vanished. A company found in a previous check and absent now is not necessarily a company that closed. The file may have been replaced, the query may have changed, or the number may be stored differently. Record that outcome as "not checked" rather than "does not exist", because the two conclusions lead to very different actions toward the customer.

What to have ready before building

  • A customer list with a clean company number per legal entity, stored as a string.
  • A decision on what triggers a check: a new customer, a request for terms, a limit breach, or a fixed cycle.
  • Somewhere to store the check result with its fetch date, not only the conclusion.
  • A defined approver for an exception, and where the reason is recorded.
  • A rule for customers that are not incorporated entities, for whom the dataset is irrelevant from the start.

Sources

#companies registry#data.gov.il#customer credit#customer verification#automation#רשם החברות

Frequently asked questions

Does the dataset tell me whether a customer has debts?

No. The dataset is a registration record: it returns name, corporation type, status, sub-status, a violation flag, the last annual report year filed, limitation and address. There are no balances, no payment history and no credit rating in it. Ability to pay is assessed from entirely different sources.

What does the violation field mean?

It is a registration flag carried in the dataset. In the query we ran it held either an empty string or the violation value, with a parallel code field. It is a value you can read programmatically and attach a business rule to, but it is not a conclusion about a customer's ability or willingness to pay.

How often should an existing customer be re-checked?

That is a business decision, but the engineering point is to store the previous result and compare. Comparing two checks reveals a status change or a newly appearing flag, and that is the event that actually matters. A single check with no history describes a state rather than a change.

Can I pull the whole dataset instead of querying one company?

Technically yes, and it is sometimes the right approach because the file is large and the query volume is high. In the query we ran, a total of 730,574 records was reported. A full pull needs paging, storage and a periodic refresh, so it only earns its keep when many customers are checked routinely.

Keep reading

Related service

Business Automation

I build custom automations that remove repetitive work end to end.

Learn more →←

About the author

Yehonatan Saadia

Freelance automation, web & MVP developer

I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.

Work with me

Have a project like this?

Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.