In case somebody wants something similar, I post my solution I came up with here:
%(progn (defun get-table-content (&optional start end) (let* ((start (or start (buffer-end -1))) (end (or end (buffer-end 1))) (lines (s-split "\n" (buffer-substring-no-properties start end)))) (remove nil (mapcar (lambda (line) (mapcar (lambda (elem) (string-trim elem)) (remove "" (split-string line "|")))) lines)))) (with-current-buffer (org-capture-get :original-buffer) (call-interactively 'copy-region-as-kill)) (let* (mapping) (with-temp-buffer "*shop-name-mapping*" (erase-buffer) (insert-file-contents "capture-templates/products-mapping.org") (let* ((start (progn (goto-char (point-min)) (forward-line 1) (point)))) (setq mapping (mapcar (lambda (x) (cons (nth 1 x) (car x))) (get-table-content start))))) (with-temp-buffer "*shop-import-temp*" (erase-buffer) (yank) (org-table-convert-region (buffer-end -1) (buffer-end 1) 2) (let* ((data (get-table-content))) (erase-buffer) (insert (concat " " (org-read-date nil nil) " * Shop-name\n" (mapconcat (lambda (line) (format " %s \t\t%s St {=€%s}" (assoc-default (nth 1 line) mapping) (nth 0 line) (nth 4 line))) data "\n") "\n assets:bank:chequing")) (ledger-mode) (let ((start (progn (goto-char (point-min)) (forward-line 1) (point))) (end (progn (goto-char (point-max)) (forward-line -1) (point)))) (ledger-post-align-postings start end)) (buffer-string))))) products-mapping would like like that: #+NAME: food | expenses:food:spice:Basilikum | Basilikum bio Sonnentor, 15g | | expenses:food:spice:Oregano | Oregano bio Sonnentor, 20g | Of course it asumes that you have some html or email bill with a table selected and you would have to change the (nth x line) depending where in the bill the name, amount and price is listed, and maybe change the currency.