API Documentation

LobbyView

This module provides a Python interface to the LobbyView REST API. It uses the same endpoints and parameter names as outlined in the LobbyView REST API Documentation (https://rest-api.lobbyview.org/).

The LobbyView API provides comprehensive data on lobbying activities in the United States. This includes information on:

  • Legislators: Details about the individuals involved in the legislative process.

  • Bills: Information about proposed laws and their progress.

  • Clients: Data on the entities that lobbyists represent.

  • Reports: Detailed reports on lobbying activities.

  • Issues: Government issues/areas that get lobbied on.

  • Networks: Connections and relationships in lobbying.

  • Texts: Written documents related to lobbying.

  • Quarter-level networks: Lobbying networks on a quarterly basis.

  • Bill-client networks: Connections between bills and the clients they affect.

This module also defines several custom exceptions to handle errors that may occur when interacting with the LobbyView API.

class LobbyView.BillClientNetworkResponse(data)

Bases: LobbyViewResponse

Response class for bill-client network data.

class LobbyView.BillResponse(data)

Bases: LobbyViewResponse

Response class for bill data.

class LobbyView.ClientResponse(data)

Bases: LobbyViewResponse

Response class for client data.

class LobbyView.IssueResponse(data)

Bases: LobbyViewResponse

Response class for issue data.

class LobbyView.LegislatorResponse(data)

Bases: LobbyViewResponse

Response class for legislator data.

class LobbyView.LobbyView(lobbyview_token, test_connection=True)

Bases: object

Main class for interacting with the LobbyView API.

bill_client_networks(congress_number=None, bill_chamber=None, bill_resolution_type=None, bill_number=None, bill_id=None, report_uuid=None, issue_ordi=None, client_uuid=None, page=1)

Gets bill-client network information from the LobbyView API based on the provided parameters. This API is private and requires special permission to access, users do not have access by default. Thus, trying to use this method without proper permissions will cause an UnauthorizedError to occur. If you are interested in this API, please contact the LobbyView team at lobbydata@gmail.com.

Parameters:
  • congress_number (int) – Session of Congress

  • bill_id (str) – The unique identifier of the bill in the format [bill_chamber].[bill_number]-[congress_number] - examples: H.R.1174-114

  • bill_chamber (str) – Chamber of the legislative branch (Component of the bill_id composite key)

  • bill_resolution_type (str) – Bill type (Component of the bill_id composite key)

  • bill_number (int) – Bill number (Component of the bill_id composite key)

  • report_uuid (str) – Unique identifier of the report

  • issue_ordi (int) – The ordinal number (position) of the issue within the report. This is an integer value that represents the order in which the issue appears in the report. For example, if an issue has issue_ordi=2, it means it is the second issue mentioned in the report.

  • client_uuid (str) – Unique identifier of the client

  • page (int) – Page number of the results, default is 1

Returns:

BillClientNetworkResponse object containing the bill-client network data

>>> output = lobbyview.bill_client_networks(congress_number=114, bill_chamber="H", bill_number=1174, client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", report_uuid="006bd48b-59cf-5cbc-99b8-fc213e509a86")
>>> output.data
[{'congress_number': 114, 'bill_chamber': 'H', 'bill_resolution_type': None, 'bill_number': 1174, 'report_uuid': '006bd48b-59cf-5cbc-99b8-fc213e509a86', 'issue_ordi': 2, 'client_uuid': '44563806-56d2-5e99-84a1-95d22a7a69b3'}]
>>> output = lobbyview.bill_client_networks(congress_number=114, bill_chamber="H", bill_resolution_type='C', report_uuid="00043607-ec6d-53a8-85b4-d418a64b423e")
>>> output.data[0]['bill_number']
125
>>> output = lobbyview.bill_client_networks(congress_number=114, bill_chamber="H", bill_number=1174, client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", report_uuid="006bd48b-59cf-5cbc-99b8-fc213e509a86")
>>> output.data[0]['issue_ordi']
2
>>> output = lobbyview.bill_client_networks(report_uuid="006bd48b-59cf-5cbc-99b8-fc213e509a86", issue_ordi=2)
>>> output.data[0]['bill_number']
1174
>>> output = lobbyview.bill_client_networks(congress_number=114, bill_chamber="H", bill_number=1174, client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3")
>>> print(output)
Bill-Client Networks:
  Bill Number: 1174, Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Issue Ordinal number (position) of the issue within the report: 2
  Bill Number: 1174, Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Issue Ordinal number (position) of the issue within the report: 5
  Bill Number: 1174, Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Issue Ordinal number (position) of the issue within the report: 4
...
>>> output = lobbyview.bill_client_networks(report_uuid='006bd48b-59cf-5cbc-99b8-fc213e509a86', issue_ordi=2)
>>> print(output)
Bill-Client Networks:
  Bill Number: 1174, Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Issue Ordinal number (position) of the issue within the report: 2
  Bill Number: 512, Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Issue Ordinal number (position) of the issue within the report: 2
>>> output = lobbyview.bill_client_networks(bill_chamber="H", bill_resolution_type='C', congress_number=116, page=2)
>>> print(output.page_info()['current_page'])
2
>>> output = lobbyview.bill_client_networks(bill_id="H.R.1174-114")
>>> print(output.page_info()['total_pages'])
3
bills(congress_number=None, bill_chamber=None, bill_resolution_type=None, bill_number=None, bill_state=None, legislator_id=None, min_introduced_date=None, max_introduced_date=None, min_updated_date=None, max_updated_date=None, page=1)

Gets bill information from the LobbyView API based on the provided parameters.

Parameters:
  • congress_number (int) – Session of Congress

  • bill_chamber (str) – Chamber of the legislative branch (Component of the bill_id composite key)

  • bill_resolution_type (str) – Bill type (Component of the bill_id composite key)

  • bill_number (int) – Bill number (Component of the bill_id composite key)

  • bill_state (str) – Bill status - using partial match with ilike operator (PostgreSQL). Examples: REFERRED, PASSED:SIMPLERES, REPORTED, ENACTED:SIGNED, PASS_OVER:HOUSE

  • legislator_id (str) – Sponsor of the bill

  • min_introduced_date (str) – Minimum date of introduction to Congress (YYYY-MM-DD)

  • max_introduced_date (str) – Maximum date of introduction to Congress (YYYY-MM-DD)

  • min_updated_date (str) – Minimum date of most recent status change (YYYY-MM-DD)

  • max_updated_date (str) – Maximum date of most recent status change (YYYY-MM-DD)

  • page (int) – Page number of the results, default is 1

Returns:

BillResponse object containing the bill data

>>> output = lobbyview.bills(congress_number=111, bill_chamber="H", bill_number=4173)
>>> output.data
[{'congress_number': 111, 'bill_chamber': 'H', 'bill_resolution_type': None, 'bill_number': 4173, 'bill_introduced_datetime': '2009-12-02', 'bill_date_updated': '2016-06-29', 'bill_state': 'ENACTED:SIGNED', 'legislator_id': 'F000339', 'bill_url': 'https://congress.gov/bill/111th-congress/house-bill/4173'}]
>>> output = lobbyview.bills(congress_number=111, bill_chamber="H", bill_number=4173)
>>> output.data[0]['bill_state']
'ENACTED:SIGNED'
>>> output = lobbyview.bills(congress_number=111, bill_chamber="H", bill_number=4173, bill_resolution_type=None, bill_state="ENACTED:SIGNED", legislator_id="F000339", min_introduced_date="2009-12-01", max_introduced_date="2009-12-03", min_updated_date="2016-06-28", max_updated_date="2016-06-30")
>>> output.data[0]['bill_url']
'https://congress.gov/bill/111th-congress/house-bill/4173'
>>> output = lobbyview.bills(congress_number=111, bill_chamber="H", bill_number=4173)
>>> print(output)
Bills:
  4173 (Congress: 111, Sponsor: F000339)
>>> output = lobbyview.bills(congress_number=116, bill_resolution_type="R", bill_number=400, legislator_id="R000595")
>>> print(output)
Bills:
  400 (Congress: 116, Sponsor: R000595)
>>> output = lobbyview.bills(min_introduced_date="2020-01-01", page=10)
>>> print(output.page_info()['current_page'])
10
clients(client_uuid=None, client_name=None, min_naics=None, max_naics=None, naics_description=None, page=1)

Gets client information from the LobbyView API based on the provided parameters.

NAICS (North American Industry Classification System) codes are hierarchical, with the first few digits representing the industry and subindustry. For example, NAICS codes starting with the same first 3 digits belong to the same industry, and codes starting with the same first 4 digits belong to the same subindustry.

When specifying the min_naics and max_naics parameters, keep in mind the hierarchical nature of NAICS codes. For instance, setting min_naics to ‘41’ and max_naics to ‘42’ will include all NAICS codes starting with ‘41’ and ‘42’, such as ‘412’, ‘413’, etc. NOT FULLY IMPLEMENTED YET

Parameters:
  • client_uuid (str) – Unique identifier of the client

  • client_name (str) – Name of the client - using partial match with ilike operator (PostgreSQL)

  • min_naics (str) – Minimum NAICS code to which the client belongs (e.g., ‘41’ for industry-level filtering)

  • max_naics (str) – Maximum NAICS code to which the client belongs (e.g., ‘42’ for industry-level filtering)

  • naics_description (str) – Descriptions of the NAICS code - using exact match with cs operator (PostgreSQL)

  • page (int) – Page number of the results, default is 1

Returns:

ClientResponse object containing the client data

>>> output = lobbyview.clients(client_name="Microsoft Corporation", min_naics='51')
>>> output.data
[{'client_uuid': '44563806-56d2-5e99-84a1-95d22a7a69b3', 'client_name': 'Microsoft Corporation', 'primary_naics': '511210', 'naics_description': ['Applications development and publishing, except on a custom basis', 'Applications software, computer, packaged', 'Computer software publishers, packaged', 'Computer software publishing and reproduction', 'Games, computer software, publishing', 'Operating systems software, computer, packaged', 'Packaged computer software publishers', 'Programming language and compiler software publishers, packaged', 'Publishers, packaged computer software', 'Software computer, packaged, publishers', 'Software publishers', 'Software publishers, packaged', 'Utility software, computer, packaged']}]
>>> output = lobbyview.clients(client_name="Microsoft Corporation")
>>> output.data[0]['client_uuid']
'44563806-56d2-5e99-84a1-95d22a7a69b3'
>>> output = lobbyview.clients(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", min_naics='5112', max_naics='5113')
>>> output.data[0]['client_name']
'Microsoft Corporation'
>>> output = lobbyview.clients(client_name="Microsoft Corporation")
>>> print(output)
Clients:
  Microsoft Corporation (ID: 44563806-56d2-5e99-84a1-95d22a7a69b3)
  PCT Government Relations on behalf of Microsoft Corporation (ID: 62eb98f6-ea3a-542d-abdb-7d2fce94b4f8)
  Cornerstone Government Affairs obo Microsoft Corporation (ID: d6634602-1d0b-560d-b4ac-e04194782ad3)
>>> output = lobbyview.clients(client_uuid='44563806-56d2-5e99-84a1-95d22a7a69b3', min_naics='5112', max_naics='5113')
>>> print(output)
Clients:
  Microsoft Corporation (ID: 44563806-56d2-5e99-84a1-95d22a7a69b3)
>>> output = lobbyview.clients(max_naics="5112", page=2)
>>> print(output.page_info()['current_page'])
2
>>> output = lobbyview.clients(client_uuid='44563806-56d2-5e99-84a1-95d22a7a69b3', naics_description='Applications software, computer, packaged')
>>> print(output.page_info()['current_page'])
1
get_data(query_string)

Sends a GET request to the LobbyView API with the provided query string. Returns the JSON response data.

Parameters:

query_string (str) – Query string for the API endpoint

Return dict:

JSON data from the API response

Raises:
>>> lobbyview.get_data('/api/v1/invalid_endpoint')
Traceback (most recent call last):
...
exceptions.UnexpectedStatusCodeError: Unexpected status code: 404
>>> lobbyview.get_data('/api/v1/legislators?invalid_param=value')
Traceback (most recent call last):
...
exceptions.UnexpectedStatusCodeError: Unexpected status code: 504
>>> lobbyview_invalid = LobbyView("invalid_token", test_connection=False)
Traceback (most recent call last):
...
exceptions.UnauthorizedError: Unauthorized. Please check your API token and permissions.
>>> lobbyview_invalid = LobbyView("invalid_token_alsd2kjfa44hsd3feawol", test_connection=False)
>>> lobbyview_invalid.get_data('/api/v1/legislators')
Traceback (most recent call last):
...
exceptions.UnauthorizedError: Unauthorized, status code: 401. Please check your API token and permissions.
issues(report_uuid=None, issue_ordi=None, issue_code=None, gov_entity=None, page=1)

Gets issue information from the LobbyView API based on the provided parameters.

Parameters:
  • report_uuid (str) – Unique identifier of the report

  • issue_ordi (int) – The ordinal number (position) of the issue within the report. This is an integer value that represents the order in which the issue appears in the report. For example, if an issue has issue_ordi=2, it means it is the second issue mentioned in the report.

  • issue_code (str) – General Issue Area Code (Section 15)

  • gov_entity (str) – House(s) of Congress and Federal agencies (Section 17) - using exact matching with cs operator (PostgreSQL)

  • page (int) – Page number of the results, default is 1

Returns:

IssueResponse object containing the issue data

>>> output = lobbyview.issues(issue_code="TRD", report_uuid="00016ab3-2246-5af8-a68d-05af40dfde68", issue_ordi=2)
>>> output.data
[{'report_uuid': '00016ab3-2246-5af8-a68d-05af40dfde68', 'issue_ordi': 2, 'issue_code': 'TRD', 'gov_entity': ['HOUSE OF REPRESENTATIVES', 'SENATE']}]
>>> output = lobbyview.issues(issue_code="TRD")
>>> output.data[0]['report_uuid']
'00016ab3-2246-5af8-a68d-05af40dfde68'
>>> output = lobbyview.issues(issue_code="TRD")
>>> print(output)
Issues:
  TRD (Report UUID: 00016ab3-2246-5af8-a68d-05af40dfde68, Issue Ordinal number (position) of the issue within the report: 2)
  TRD (Report UUID: 0001f9b9-84d7-5ceb-af03-8987bb76d593, Issue Ordinal number (position) of the issue within the report: 1)
  TRD (Report UUID: 00020868-67be-5975-955d-7ecab8d42e6e, Issue Ordinal number (position) of the issue within the report: 2)
  TRD (Report UUID: 00040172-6cda-5b31-8d83-9c1bcfd4b289, Issue Ordinal number (position) of the issue within the report: 1)
  TRD (Report UUID: 00047fc7-2207-5f3b-951d-692b9f35825b, Issue Ordinal number (position) of the issue within the report: 1)
  TRD (Report UUID: 000759fa-dc93-5849-b1e5-7aa751e86433, Issue Ordinal number (position) of the issue within the report: 4)
...
>>> output = lobbyview.issues(issue_code="TRD", page=2)
>>> print(output.page_info()['current_page'])
2
>>> output = lobbyview.issues(report_uuid='00016ab3-2246-5af8-a68d-05af40dfde68', gov_entity='SENATE')
>>> output.data
[{'report_uuid': '00016ab3-2246-5af8-a68d-05af40dfde68', 'issue_ordi': 1, 'issue_code': 'SMB', 'gov_entity': ['SENATE', 'SMALL BUSINESS ADMINISTRATION', 'HOUSE OF REPRESENTATIVES']}, {'report_uuid': '00016ab3-2246-5af8-a68d-05af40dfde68', 'issue_ordi': 2, 'issue_code': 'TRD', 'gov_entity': ['HOUSE OF REPRESENTATIVES', 'SENATE']}]
legislators(legislator_id=None, legislator_govtrack_id=None, legislator_first_name=None, legislator_last_name=None, legislator_full_name=None, legislator_gender=None, birthday=None, min_birthday=None, max_birthday=None, page=1)

Gets legislator information from the LobbyView API based on the provided parameters.

Parameters:
  • legislator_id (str) – Unique identifier of the legislator from LobbyView (Bioguide ID)

  • legislator_govtrack_id (str) – Unique identifier of the legislator from GovTrack

  • legislator_first_name (str) – First name of the legislator - using partial match with ilike operator (PostgreSQL)

  • legislator_last_name (str) – Last name of the legislator - using partial match with ilike operator (PostgreSQL)

  • legislator_full_name (str) – Full name of the legislator (First Middle Last) - using partial match with ilike operator (PostgreSQL)

  • legislator_gender (str) – Gender of the legislator

  • birthday (str) – Exact birthday of the legislator (YYYY-MM-DD)

  • min_birthday (str) – Minimum birthday of the legislator (YYYY-MM-DD)

  • max_birthday (str) – Maximum birthday of the legislator (YYYY-MM-DD)

  • page (int) – Page number of the results, default is 1

Returns:

LegislatorResponse object containing the legislator data

>>> output = lobbyview.legislators(legislator_id="M000303")
>>> output.data
[{'legislator_id': 'M000303', 'legislator_govtrack_id': '300071', 'legislator_other_ids': {'fec': ['S6AZ00019', 'P80002801'], 'lis': 'S197', 'cspan': 7476, 'icpsr': 15039, 'thomas': '00754', 'bioguide': 'M000303', 'govtrack': 300071, 'maplight': 592, 'wikidata': 'Q10390', 'votesmart': 53270, 'wikipedia': 'John McCain', 'ballotpedia': 'John McCain', 'opensecrets': 'N00006424', 'house_history': 17696, 'google_entity_id': 'kg:/m/0bymv'}, 'legislator_first_name': 'John', 'legislator_last_name': 'McCain', 'legislator_full_name': 'John McCain', 'legislator_other_names': {'last': 'McCain', 'first': 'John', 'middle': 'S.', 'official_full': 'John McCain'}, 'legislator_birthday': '1936-08-29', 'legislator_gender': 'M'}]
>>> output = lobbyview.legislators(legislator_first_name="John", legislator_last_name="McCain")
>>> output.data[0]['legislator_id']
'M000303'
>>> output = lobbyview.legislators(legislator_id="M000303", birthday="1936-08-29", min_birthday="1950-08-28")
>>> output.data[0]['legislator_full_name']
'John McCain'
>>> output = lobbyview.legislators(legislator_first_name="John", legislator_last_name="McCain")
>>> print(output)
Legislators:
  John McCain (ID: M000303)
>>> output = lobbyview.legislators(legislator_govtrack_id=412755, legislator_full_name="TJ Cox", legislator_gender="M", min_birthday="1963-03-14", max_birthday="1963-08-14")
>>> print(output)
Legislators:
  TJ Cox (ID: C001124)
>>> output = lobbyview.legislators(legislator_first_name="John", page=2)
>>> print(output.page_info()['current_page'])
2
networks(client_uuid=None, legislator_id=None, report_year=None, min_report_year=None, max_report_year=None, min_bills_sponsored=None, max_bills_sponsored=None, page=1)

Gets network information from the LobbyView API based on the provided parameters.

Parameters:
  • client_uuid (str) – Unique identifier of the client

  • legislator_id (str) – Unique identifier of the legislator

  • report_year (int) – Year of the report

  • min_report_year (int) – Minimum year of the report

  • max_report_year (int) – Maximum year of the report

  • min_bills_sponsored (int) – Minimum number of bills sponsored by the legislator in a specific year lobbied by the client

  • max_bills_sponsored (int) – Maximum number of bills sponsored by the legislator in a specific year lobbied by the client

  • page (int) – Page number of the results, default is 1

Returns:

NetworkResponse object containing the network data

>>> output = lobbyview.networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303")
>>> output.data
[{'client_uuid': '44563806-56d2-5e99-84a1-95d22a7a69b3', 'legislator_id': 'M000303', 'report_year': 2006, 'n_bills_sponsored': 1}, {'client_uuid': '44563806-56d2-5e99-84a1-95d22a7a69b3', 'legislator_id': 'M000303', 'report_year': 2017, 'n_bills_sponsored': 1}]
>>> output = lobbyview.networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303")
>>> output.data[0]['report_year']
2006
>>> output = lobbyview.networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", min_report_year=2016, max_report_year=2018, min_bills_sponsored=0, max_bills_sponsored=2)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2006)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303")
>>> print(output)
Networks:
  Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Legislator ID: M000303, Year: 2006, Bills Sponsored: 1
  Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Legislator ID: M000303, Year: 2017, Bills Sponsored: 1
>>> output = lobbyview.networks(min_report_year=2016, max_report_year=2018, min_bills_sponsored=0, max_bills_sponsored=2, client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303")
>>> print(output)
Networks:
  Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Legislator ID: M000303, Year: 2017, Bills Sponsored: 1
>>> output = lobbyview.networks(min_bills_sponsored=50, page=2)
>>> print(output.page_info()['current_page'])
2
paginate(func, **kwargs)

Paginates the data retrieval from the LobbyView API using lazy evaluation via a generator that yields results one at a time.

Parameters:
  • func (function) – The API endpoint function to be paginated.

  • kwargs (dict) – Additional keyword arguments to be passed to the API endpoint function.

Returns:

A generator object that yields paginated results one item at a time.

Raises:
>>> for legislator in lobbyview.paginate(lobbyview.legislators, legislator_first_name="John", legislator_last_name="McCain"):
...     print(f"Legislator: {legislator['legislator_full_name']}")
Retrieving page 1...
Legislator: John McCain
>>> for bill in lobbyview.paginate(lobbyview.bills, congress_number=111, bill_chamber="H", bill_number=4173):
...     print(f"Bill: {bill['bill_number']} - {bill['bill_chamber']}")
Retrieving page 1...
Bill: 4173 - H
>>> for client in lobbyview.paginate(lobbyview.clients, client_name='InvalidClientName'):
...     print(f"Client: {client['client_name']} - NAICS: {client['primary_naics']}")
Traceback (most recent call last):
...
exceptions.InvalidPageNumberError: Invalid page number: 1, total pages: 0
>>> for network in lobbyview.paginate(lobbyview.bill_client_networks, congress_number=114, bill_chamber="H", bill_number=1174, client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3"):
...     print(f"Issue Ordinal number (position) of the issue within the report: {network['issue_ordi']}")
Retrieving page 1...
Issue Ordinal number (position) of the issue within the report: 2
Issue Ordinal number (position) of the issue within the report: 5
Issue Ordinal number (position) of the issue within the report: 4
...
>>> for text in lobbyview.paginate(lobbyview.texts, issue_code="HCR", issue_text="covid"):
...     print(f"Issue Code: {text['issue_code']}")
Retrieving page 1...
Issue Code: HCR
Issue Code: HCR
...
Issue Code: HCR
Retrieving page 2...
Issue Code: HCR
Issue Code: HCR
...
quarter_level_networks(client_uuid=None, legislator_id=None, report_year=None, min_report_year=None, max_report_year=None, report_quarter_code=None, min_report_quarter_code=None, max_report_quarter_code=None, min_bills_sponsored=None, max_bills_sponsored=None, page=1)

Gets quarter-level network information from the LobbyView API based on the provided parameters. This API is private and requires special permission to access, users do not have access by default. Thus, trying to use this method without proper permissions will cause an UnauthorizedError to occur. If you are interested in this API, please contact the LobbyView team at lobbydata@gmail.com.

Parameters:
  • client_uuid (str) – Unique identifier of the client

  • legislator_id (str) – Unique identifier of the legislator

  • report_year (int) – Year of the report

  • min_report_year (int) – Minimum year of the report

  • max_report_year (int) – Maximum year of the report

  • report_quarter_code (int) – Quarter period of the report (returns quarter as string)

  • min_report_quarter_code (int) – Minimum quarter period of the report (returns quarter as string)

  • max_report_quarter_code (int) – Maximum quarter period of the report (returns quarter as string)

  • min_bills_sponsored (int) – Minimum number of bills sponsored by the legislator in a specific quarter lobbied by the client

  • max_bills_sponsored (int) – Maximum number of bills sponsored by the legislator in a specific quarter lobbied by the client

  • page (int) – Page number of the results, default is 1

Returns:

QuarterLevelNetworkResponse object containing the quarter-level network data

>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, report_quarter_code=4)
>>> output.data
[{'client_uuid': '44563806-56d2-5e99-84a1-95d22a7a69b3', 'legislator_id': 'M000303', 'report_year': 2017, 'report_quarter_code': '4', 'n_bills_sponsored': 1}]
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, report_quarter_code=4)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, report_quarter_code=4, min_report_quarter_code=9, max_report_quarter_code=-2)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, min_report_quarter_code=3, max_report_quarter_code=5)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, min_report_year=2030, max_report_year=2000)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", min_report_year=2016, max_report_year=2018)
>>> output.data[0]['n_bills_sponsored']
1
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, min_bills_sponsored=0, max_bills_sponsored=2)
>>> output.data[0]['report_quarter_code']
'4'
>>> output = lobbyview.quarter_level_networks(client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303", report_year=2017, report_quarter_code=4)
>>> print(output)
Quarter-Level Networks:
  Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Legislator ID: M000303, Year: 2017, Quarter: 4, Bills Sponsored: 1
>>> output = lobbyview.quarter_level_networks(min_bills_sponsored=0, max_bills_sponsored=2, client_uuid="44563806-56d2-5e99-84a1-95d22a7a69b3", legislator_id="M000303")
>>> print(output)
Quarter-Level Networks:
  Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Legislator ID: M000303, Year: 2006, Quarter: 34, Bills Sponsored: 1
  Client UUID: 44563806-56d2-5e99-84a1-95d22a7a69b3, Legislator ID: M000303, Year: 2017, Quarter: 4, Bills Sponsored: 1
>>> output = lobbyview.quarter_level_networks(min_bills_sponsored=20, page=2)
>>> print(output.page_info()['current_page'])
2
reports(report_uuid=None, client_uuid=None, registrant_uuid=None, registrant_name=None, report_year=None, min_report_year=None, max_report_year=None, report_quarter_code=None, min_report_quarter_code=None, max_report_quarter_code=None, min_amount=None, max_amount=None, is_no_activity=None, is_client_self_filer=None, is_amendment=None, page=1)

Gets report information from the LobbyView API based on the provided parameters.

Parameters:
  • report_uuid (str) – Unique identifier of the report

  • client_uuid (str) – Unique identifier of the client

  • registrant_uuid (str) – Unique identifier of the registrant

  • registrant_name (str) – Name of the registrant - using partial match with ilike operator (PostgreSQL)

  • report_year (int) – Year of the report

  • min_report_year (int) – Minimum year of the report

  • max_report_year (int) – Maximum year of the report

  • report_quarter_code (int) – Quarter period of the report (returns quarter as string)

  • min_report_quarter_code (int) – Minimum quarter period of the report (returns quarter as string)

  • max_report_quarter_code (int) – Maximum quarter period of the report (returns quarter as string)

  • min_amount (str) – Minimum lobbying firm income or lobbying expense (in-house)

  • max_amount (str) – Maximum lobbying firm income or lobbying expense (in-house)

  • is_no_activity (bool) – Quarterly activity indicator

  • is_client_self_filer (bool) – An organization employing its own in-house lobbyist(s)

  • is_amendment (bool) – Amendment of previous report

  • page (int) – Page number of the results, default is 1

Returns:

ReportResponse object containing the report data

>>> output = lobbyview.reports(report_year=2020, report_quarter_code=2, is_client_self_filer=True, report_uuid="4b799814-3e94-5ee1-8dd4-b32aead9aca6")
>>> output.data
[{'report_uuid': '4b799814-3e94-5ee1-8dd4-b32aead9aca6', 'client_uuid': 'cdf5a171-6aab-50ea-912c-68c054decdce', 'registrant_uuid': '323adb44-3062-5a5f-98ea-6d4ca51e6f43', 'registrant_name': 'NATIONAL ASSOCIATION OF REALTORS', 'report_year': 2020, 'report_quarter_code': '2', 'amount': '$11,680,000.00', 'is_no_activity': False, 'is_client_self_filer': True, 'is_amendment': False}]
>>> output = lobbyview.reports(report_year=2020, report_quarter_code=2, is_client_self_filer=True, report_uuid="4b799814-3e94-5ee1-8dd4-b32aead9aca6")
>>> output.data[0]['amount']
'$11,680,000.00'
>>> output = lobbyview.reports(report_year=2020, report_quarter_code=2, is_client_self_filer=True, report_uuid="4b799814-3e94-5ee1-8dd4-b32aead9aca6", min_report_quarter_code=5, max_report_quarter_code=0)
>>> output.data[0]['amount']
'$11,680,000.00'
>>> output = lobbyview.reports(client_uuid="cdf5a171-6aab-50ea-912c-68c054decdce", registrant_uuid="323adb44-3062-5a5f-98ea-6d4ca51e6f43", registrant_name="NATIONAL ASSOCIATION OF REALTORS", min_amount="$11,679,999.99", max_amount="$11,680,000.01", is_no_activity=False, is_amendment=False, min_report_year=2017, max_report_year=2023)
>>> output.data[0]['report_year']
2020
>>> output = lobbyview.reports(client_uuid="cdf5a171-6aab-50ea-912c-68c054decdce", registrant_uuid="323adb44-3062-5a5f-98ea-6d4ca51e6f43", registrant_name="NATIONAL ASSOCIATION OF REALTORS", min_amount="$11,679,999.99", max_amount="$11,680,000.01", is_no_activity=False, is_amendment=False, report_year=2020, min_report_year=2040, max_report_year=1800)
>>> output.data[0]['report_year']
2020
>>> output = lobbyview.reports(report_year=2020, report_quarter_code=2, is_client_self_filer=True, report_uuid="4b799814-3e94-5ee1-8dd4-b32aead9aca6")
>>> print(output)
Reports:
  4b799814-3e94-5ee1-8dd4-b32aead9aca6 (Year: 2020, Quarter: 2)
>>> output = lobbyview.reports(client_uuid="78043d66-6dc9-5d6c-b0ee-c3afaa33d8d7", report_year=2020, min_report_quarter_code=2, max_report_quarter_code=4, min_amount=150000)
>>> print(output)
Reports:
  e2fb926a-2ac5-5c5c-9140-54b4c79d7e56 (Year: 2020, Quarter: 2)
>>> output = lobbyview.reports(report_year=2020, page=2)
>>> print(output.page_info()['current_page'])
2
texts(report_uuid=None, issue_ordi=None, issue_code=None, issue_text=None, page=1)

Gets issue text data from the LobbyView API based on the provided parameters.

Parameters:
  • report_uuid (str) – Unique identifier of the report

  • issue_ordi (int) – The ordinal number (position) of the issue within the report. This is an integer value that represents the order in which the issue appears in the report. For example, if an issue has issue_ordi=2, it means it is the second issue mentioned in the report.

  • issue_code (str) – General Issue Area Code (Section 15)

  • issue_text (str) – Specific lobbying issues (Section 16) - using partial match with ilike operator (PostgreSQL). Examples: Appropriations, House and Senate Defense Appropriations Bills, House and Senate Defense Authorization Bills, No lobbying activity., Health care funding and appropriations

  • page (int) – Page number of the results, default is 1

Returns:

TextResponse object containing the text data

>>> output = lobbyview.texts(issue_code="HCR", issue_text="covid", report_uuid="000bef17-9f0a-5d7c-8660-edca16e1dfce")
>>> output.data
[{'report_uuid': '000bef17-9f0a-5d7c-8660-edca16e1dfce', 'issue_ordi': 1, 'issue_code': 'HCR', 'issue_text': 'HR 748 CARES Act - Issues related to COVID-19 relief'}]
>>> output = lobbyview.texts(issue_code="HCR", issue_text="covid")
>>> output.data[0]['issue_ordi']
1
>>> output = lobbyview.texts(issue_code="HCR", report_uuid="000bef17-9f0a-5d7c-8660-edca16e1dfce", issue_ordi=1)
>>> output.data[0]['issue_text']
'HR 748 CARES Act - Issues related to COVID-19 relief'
>>> output = lobbyview.texts(issue_code="HCR", issue_text="covid")
>>> print(output)
Texts:
  Issue Code: HCR
  Issue Text: HR 748 CARES Act - Issues related to COVID-19 relief
...
>>> output = lobbyview.texts(report_uuid='000bef17-9f0a-5d7c-8660-edca16e1dfce', issue_ordi=1)
>>> print(output)
Texts:
  Issue Code: HCR
  Issue Text: HR 748 CARES Act - Issues related to COVID-19 relief
class LobbyView.LobbyViewResponse(data)

Bases: object

Base class for LobbyView API responses.

page_info()
Return str:

Current page number, total pages, and total rows

>>> data = {
...     'data': [],
...     'currentPage': 1,
...     'totalPage': 2,
...     'totalNumber': 0
... }
>>> response = LobbyViewResponse(data)
>>> print(response.page_info())
{'current_page': 1, 'total_pages': 2, 'total_rows': 0}
class LobbyView.NetworkResponse(data)

Bases: LobbyViewResponse

Response class for network data.

class LobbyView.QuarterLevelNetworkResponse(data)

Bases: LobbyViewResponse

Response class for quarter-level network data.

class LobbyView.ReportResponse(data)

Bases: LobbyViewResponse

Response class for report data.

class LobbyView.TextResponse(data)

Bases: LobbyViewResponse

Response class for text data.

LobbyView.url_quote(func)

Decorator function to quote string arguments in the function call.

LobbyView.validate_token(func)

Decorator function to validate the LobbyView token.

Exceptions

(Sub)classes of LobbyViewError that represent different types of errors.

exception exceptions.InvalidPageNumberError(current_page, total_pages)

Bases: LobbyViewError

Raised when the current page number is greater than the total number of pages.

exception exceptions.LobbyViewError

Bases: Exception

Base class for LobbyView API errors.

exception exceptions.PartialContentError(status_code)

Bases: LobbyViewError

Raised when the API returns a partial response.

exception exceptions.RequestError

Bases: LobbyViewError

Raised when an error occurs during the request to the LobbyView API.

exception exceptions.TooManyRequestsError(status_code)

Bases: LobbyViewError

Raised when the API rate limit is exceeded.

exception exceptions.UnauthorizedError(status_code=None)

Bases: LobbyViewError

Raised when the API token is invalid or unauthorized.

exception exceptions.UnexpectedStatusCodeError(status_code)

Bases: LobbyViewError

Raised when the API returns an unexpected status code.