diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..fd1ac68
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+config.ini
+__pycache__/
diff --git a/TableParser.py b/TableParser.py
new file mode 100644
index 0000000..311f7b9
--- /dev/null
+++ b/TableParser.py
@@ -0,0 +1,80 @@
+import requests
+from bs4 import BeautifulSoup
+import pyodbc
+import re
+from datetime import datetime, timedelta
+import pytz
+
+class TableParser:
+    TIMEZONE = 'Europe/Madrid'
+    EMPTY_CELL_CLASSES = ['row_labels', 'even_row', 'odd_row']
+
+    def __init__(self, baseUrl):
+        self.baseUrl = baseUrl
+
+    def parse(self, year, month, day, area, db = None):
+        url = self.baseUrl
+        params = {
+            'year': year,
+            'month': month,
+            'day': day,
+            'area': area
+        }
+        page = requests.get(url, params=params)
+        soup = BeautifulSoup(page.content, 'html.parser')
+        table = soup.find(id="day_main")
+
+        hores = []
+        for h in range(8,22):
+            newhour = ""
+            if h < 10:
+                newhour += "0"
+            newhour += str(h);
+
+            hores.append(newhour + ":00");
+            hores.append(newhour + ":30");
+
+        p = re.compile(r"Aula (\S+) ?\(\d*\)", re.IGNORECASE)
+
+        for hora in hores:
+            td_hora = table.find(text=hora).findNext('td')
+            column = 1
+
+            while hora not in td_hora.get_text():
+
+                classes = td_hora['class'];
+                if td_hora.has_attr('class') and not td_hora['class'][0] in self.EMPTY_CELL_CLASSES:
+                    assignaturaRaw = td_hora.get_text().strip()
+                    assignatura = assignaturaRaw.lower()
+                    aulaRaw = table.find_all("th")[column].get_text().strip()
+                    aula = p.match(aulaRaw).group(1)
+                    durada = int(td_hora.get("rowspan"))*30
+
+                    timeSplit = hora.split(':')
+
+                    begins = datetime(year, month, day, int(timeSplit[0]), int(timeSplit[1]))
+                    begins = pytz.timezone(self.TIMEZONE).localize(begins)
+                    ends = begins + timedelta(minutes=durada)
+
+                    print(("Afegint " if db != None else "") + assignaturaRaw
+                            + ", " + hora
+                            + ", " + str(durada) + "mins"
+                            + ", " + aula)
+
+                    if db != None:
+                        cursor1 = db.cursor()
+                        cursor1.execute("SELECT id FROM classes WHERE calendar_name = ? AND room = ? AND begins = ? AND ends = ?",
+                                assignatura, aula, begins, ends)
+                        row = cursor1.fetchone()
+                        if row:
+                            print("[WARNING] Ja estava a la DB (id " + str(row.id) + ")")
+                        else:
+                            cursor2 = db.cursor()
+                            cursor2.execute("INSERT INTO classes (calendar_name, room, begins, ends) VALUES (?, ?, ?, ?)",
+                                    assignatura, aula, begins, ends)
+
+                td_hora = td_hora.findNext('td')
+                column = column + 1
+
+        if db != None:
+            db.commit()
diff --git a/config.ini.default b/config.ini.default
new file mode 100644
index 0000000..59c6506
--- /dev/null
+++ b/config.ini.default
@@ -0,0 +1,5 @@
+[db]
+host = localhost
+database = covid_tracability
+user = user
+password = password
diff --git a/cron-parse-tables.py b/cron-parse-tables.py
new file mode 100644
index 0000000..364ecf4
--- /dev/null
+++ b/cron-parse-tables.py
@@ -0,0 +1,31 @@
+import pyodbc
+import configparser
+from TableParser import TableParser
+import datetime
+
+config = configparser.ConfigParser()
+config.read('config.ini')
+
+db_host = config['db']['host']
+db_database = config['db']['database']
+db_user = config['db']['user']
+db_password = config['db']['password']
+
+connection_string = (
+    'DRIVER=MySQL ODBC 8.0 ANSI Driver;'
+    'SERVER=' + db_host + ';'
+    'DATABASE=' + db_database + ';'
+    'UID=' + db_user + ';'
+    'PWD=' + db_password + ';'
+    'charset=utf8mb4;'
+)
+
+db = pyodbc.connect(connection_string)
+db.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
+db.setencoding(encoding='utf-8')
+
+tomorrow = datetime.date.today() + datetime.timedelta(days=1)
+
+parser = TableParser('https://fme-intranet.upc.edu/appsext/mrbs/web/day.php')
+for area in [2, 6]:
+    parser.parse(tomorrow.year, tomorrow.month, tomorrow.day, area, db)
diff --git a/table-parser.py b/table-parser.py
deleted file mode 100644
index 63f3200..0000000
--- a/table-parser.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import requests
-from bs4 import BeautifulSoup
-
-url = "https://fme-intranet.upc.edu/appsext/mrbs/web/day.php?year=2020&month=9&day=17&area=2"
-page = requests.get(url)
-soup = BeautifulSoup(page.content, 'html.parser')
-table = soup.find(id="day_main")
-
-hores = []
-for h in range(8,22):
-    newhour = ""
-    if h < 10:
-        newhour += "0"
-    newhour += str(h);
-    
-    hores.append(newhour + ":00");
-    hores.append(newhour + ":30");
-
-for hora in hores:
-    td_hora = table.find(text=hora).findNext('td')
-    column = 1
-
-    while hora not in td_hora.get_text():
-        
-        if "CDATA" not in td_hora.get_text():
-            assignatura = td_hora.get_text().strip()
-            aula = table.find_all("th")[column].get_text().strip()
-            durada = int(td_hora.get("rowspan"))*30
-            
-            print(assignatura
-                    + ", " + hora
-                    + ", " + str(durada) + "mins"
-                    + ", " + aula)
-        
-        td_hora = td_hora.findNext('td')
-        column = column + 1
diff --git a/table_parser_docs.md b/table_parser_docs.md
new file mode 100644
index 0000000..4088cf9
--- /dev/null
+++ b/table_parser_docs.md
@@ -0,0 +1,19 @@
+# Com utilitzar la classe TableParser?
+1. Instal·lar Python 3 i PIP3
+2. Instal·lar les següents llibreries: configparser, datetime, bs4, pytz, requests
+
+Per parsejar les classes per un dia concret, es pot utilitzar el següent codi Python:
+
+```
+from TableParser import TableParser
+parser = TableParser('https://fme-intranet.upc.edu/appsext/mrbs/web/day.php')
+parser.parse(2020, 09, 28, 2)
+```
+
+## Com configurar el cron script?
+Per poder escriure a la base de dades les classes del dia següent s'ha de fer el següent addicionalment:
+1. Instal·lar la llibreria pyodbc
+2. Instal·lar el connector MySQL ODBC (https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation.html)
+3. Copiar l'arxiu `config.ini.default` a `config.ini` i introduir les credencials i informació de la base de dades.
+4. Configurar cron perquè s'executi l'script `cron_table_parser.py` un cop cada dia.
+
