diff --git a/modules/boursorama/pages/card_history.py b/modules/boursorama/pages/card_history.py
new file mode 100644
index 00000000..20fc982c
--- /dev/null
+++ b/modules/boursorama/pages/card_history.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Gabriel Kerneis
+# Copyright(C) 2009-2011 Romain Bignon
+#
+# This file is part of weboob.
+#
+# weboob is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# weboob is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with weboob. If not, see .
+
+
+import re
+
+from weboob.tools.browser import BasePage
+from weboob.tools.capabilities.bank.transactions import FrenchTransaction
+
+
+__all__ = ['CardHistory']
+
+
+class Transaction(FrenchTransaction):
+ PATTERNS = [(re.compile('^(ACHAT|PAIEMENT) CARTE (?P
\d{2})(?P\d{2})(?P\d{2}) (?P.*)'),
+ FrenchTransaction.TYPE_CARD),
+ (re.compile('^RETRAIT DAB (?P\d{2})(?P\d{2})(?P\d{2}) (?P.*)'),
+ FrenchTransaction.TYPE_WITHDRAWAL)
+ ]
+
+
+class CardHistory(BasePage):
+ def get_operations(self):
+ for form in self.document.xpath('//form[@name="marques"]'):
+ for tr in form.xpath('.//tbody/tr'):
+ if tr.attrib.get('class', '') == 'total' or 'style' in tr.attrib:
+ continue
+
+ tds = tr.xpath('./td')
+ date = self.parser.tocleanstring(tds[0])
+ label = self.parser.tocleanstring(tds[1])
+ amount = self.parser.tocleanstring(tds[2])
+
+ try:
+ _id = tr.xpath('.//input[@type="hidden"]')[0].attrib['id'].split('_')[1]
+ except (KeyError,IndexError):
+ _id = 0
+
+ operation = Transaction(_id)
+ operation.parse(date=date, raw=label)
+ operation.set_amount(amount)
+
+ yield operation
+
+ def get_next_url(self):
+ return None