Extract Invoices in English

Extracts information from sales invoices using its prebuilt invoice models. The Invoice API enables customers to take invoices in a variety of formats and return structured data to automate the invoice processing. It combines the powerful Optical Character Recognition (OCR) capabilities with invoice understanding deep learning models to extract key information from invoices in English. It extracts the text, tables, and information such as customer, vendor, invoice ID, invoice due date, total, invoice amount due, tax amount, ship to, bill to, and more.

For this extraction we use Microsoft Azure Form Recognizer api.

To be able to use this activity, we need an Api Key and an Endpoint URl.

You can use the existing keys from a Microsoft Azure Form Recognizer resource(if any available), or you can create a new one. To create a new resource, once you have the azure subscription, create a Form Recognizer resource in the Azure portal to get your key and endpoint. After it deploys, click Go to resource. You will need the key and endpoint from the resource you create to connect your workflow to the Form Recognizer API.

You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.

Below is a screenshot of Form Recognizer resource. Just copy one of the keys to Api Key and the EndPoint to Endpoint URl.

Form Recognizer resource keysExtract invoices designer

Designer Properties#

  1. Api Key The Microsoft Azure api key for Form recognizer. Please check above how to get this key.
  2. Endpoint Url The Microsoft Azure Endpoint for Form recognizer. Please check above how to get this key.
  3. File Path The path to the file for which we want to extract the tables, words or lines.
  4. All String Fields All string fields extracted from the document for each invoice form. Represents a dictionary of fields grouped by field name(Dictionary(string, string)). If there are 2 fields with the same name, the last one will be used. Most of the time, we have only one invoice in a document, and we can use this property to access its fields as string. For all the possible keys please check https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/concept-invoices#example-output.
  5. All Invoice Fields All fields extracted from document for each invoice. Represents a dictionary of fields grouped by field name(Dictionary(string, Field)). If there are 2 fields with the same name, the last one will be used. Most of the time, we have only one invoice in a document, and we can use this property to access its fields as Field. For all the possible keys please check https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/concept-invoices#example-output.
    public class Field
    {
    public string Name { get; }
    public object Value { get; }
    public FieldType Type { get; }
    public List<Field> ValueList { get; }
    public Dictionary<string, Field> ValueDictionary { get; }
    }
    public enum FieldType
    {
    String,
    Date,
    TimeSpan,
    PhoneNumber,
    Float,
    Integer,
    List,
    Dictionary,
    }
  6. Output Tables Extracted tables by page number represented as a Dictionary(int, List(DataTable)), where the key is the page number while the value is a list of tables for that page.
  7. Merged Tables All the extracted data tables merged under one table and represented as a DataTable. This is useful when having only one table.

Properties#

Invoice extraction properties

Azure Properties#

  1. See Designer Properties above.
  2. Minimum Confidence Minimum confidence when accepting the parsed input content. By default, it is 0.5, but it can have any values between 0 and 1.

General Properties#

See General Properties.

Misc#

See Misc.

Out Error#

See Out Error.

Result#

  1. All String Fields See Designer Properties above.
  2. All Invoice Fields See Designer Properties above.
  3. Document Lines Extracted lines by page and line number represented as a Dictionary(int, Dictionary(int, string)), where the key is the page number while the value is a dictionary from line number to corresponding string on that line.
  4. Invoice Fields by Invoice The extracted fields for each invoice in the file represented as a List(Dictionary(string, Field)) where each item in the list represents the data for an invoice and each invoice has dictionary of predefined keys to the corresponding extracted values. For more details about Field type please check above Field Class. For all the possible keys please check https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/concept-invoices#example-output.
  5. Merged Tables See Designer Properties above.
  6. Output Tables See Designer Properties above.
  7. Output Words Extracted words by page and line number represented as a Dictionary(int, Dictionary(int, List(string))), where the key is the page number while the value is a dictionary from line number to the list of words on that line.
  8. String Fields by Invoice The extracted fields for each invoice in the file represented as a List(Dictionary(string, string)) where each item in the list represents the data for an invoice and each invoice has dictionary of predefined keys to the corresponding extracted values. For all the possible keys please check https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/concept-invoices#example-output.

Example#

Invoice Extraction

Sample Invoice file

In this example, we extract all the available invoice fields from SampleInvoice and display them in a MessageBox separated by new line.

Please set the Api Key, Endpoint URl and file path using the above SampleInvoice.jpg file or any other file.